【问题标题】:Renaming file name on upload, JSP上传时重命名文件名,JSP
【发布时间】:2014-02-22 07:10:49
【问题描述】:

我有 4 个输入标签来上传 4 个不同的文件,

<form method="post" name="myform" action="upload" target="_blank" enctype="multipart/form-data" style="position: absolute; right: -5%; top: 2%;">
Left File :  <input type="file" name="dataFile1" id="fileChooser1" /><br><br>
Right File : <input type="file" name="dataFile2" id="fileChooser2" /><br><br>
Config File :<input type="file" name="dataFile3" id="fileChooser3" /><br><br>
Geco File :  <input type="file" name="dataFile4" id="fileChooser4" /><br><br><br>
<button type="button" onclick="ValidateFile()">Click to Upload</button>
</form>

现在在我的 Servlet.java 端,我想重命名正在上传的文件。

我该怎么做?使用共享上传器。

PS:我已经尝试获取输入标签的 id 的名称,以便我可以创建一个 if 循环并根据需要分配 fileName 名称,

String my = request.getParameter("dataFile1");
System.out.println(my);

这个打印是空的。

【问题讨论】:

  • 是的,我试过了,效果很好,但我想在上传文件时重命名。
  • 是的,完成了。立即查看,如有修改建议
  • 我的答案的另一个更新,使其更清晰。
  • 您好,请告诉我您使用的是 Servlet 3.0 吗?还是阿帕奇公地?我的意思是你如何处理 Servlet 中上传的文件?
  • 嘿,amro,我在 apache commons。

标签: java jsp


【解决方案1】:

要判断哪个文件是哪个文件,使用从ServletFileUpload#parseRequest得到的FileItem,可以调用getFieldName方法从JSP中获取name属性的值上面的sn-p。

要以特定名称保存文件,请创建一个具有正确名称的 File 对象并使用该对象调用 FileItem#write

此代码未经测试,但应该为您提供一个起点。

List items = upload.parseRequest(httpRequest);
Iterator iter = items.iterator();
File outputDir = getOutputDir();
while (iter.hasNext()) {
  FileItem item = (FileItem) iter.next();
  String origName = item.getFieldName();
  if ("dataFile1".equals(origName) {
    File outputFile = new File(outputDir, "firstFile.txt"); // This bit is doing the renaming
    item.write(outputFile);
  } // ... else all the other inputs get handled ...
}

【讨论】:

  • 对老式的迭代器和你有什么感到抱歉。我正在直接使用 javadocs.. 这里没有 IDE 可以帮助我:(
  • 重要的是它可以工作。一个示例只是为了说明一般概念,而不是编写最完美优雅的代码:)
【解决方案2】:

我认为你需要做的是:

1st - 解析请求以获取 FileItem 列表,如下所示:

List<FileItem> items = upload.parseRequest(request);

第二次 - 处理上传的项目,如下所示:

Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {  
  FileItem item = iter.next();   
 if (item.isFormField()) {      
  processFormField(item);   
 } else if (!item.isFormField()) { 
 // Process a file upload
    String fieldName = item.getFieldName();  
  String fileName = item.getName();   
 String contentType = item.getContentType(); 
   boolean isInMemory = item.isInMemory();  
  long sizeInBytes = item.getSize();

//here you change the name of the uploaded file and then write it 

    File uploadedFile = new File(dir , "fileName");   
 item.write(uploadedFile);


  }
}

请查看处理上传项目部分中的文档here

给我一​​些反馈

希望有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-24
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多