我正在尝试将三张图片上传到我的服务器,正在运行,但总是上传用户选择的最后一个文件,而不是上传的三张文件。
这是我的代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response){
boolean multipart = ServletFileUpload.isMultipartContent(request);
if (multipart) {
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
fileItemFactory.setSizeThreshold(5 * 1024 * 1024); //5 MB
fileItemFactory.setRepository(tmpDir);
ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
try {
List items = uploadHandler.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
File file = new File(dir, generateNewName());
item.write(file);
}
} catch (FileUploadException ex) {
} catch (Exception ex) {
}
}
}
- UPDATE:
<html>
<head>
<title>Upload</title>
</head>
<body>
<form action="Upload" method="post" enctype="multipart/form-data">
<input type="file" name="file1" />
<br />
<input type="file" name="file2" />
<br />
<input type="file" name="file3" />
<br />
<input type="submit" value="Enviar" />
</form>
</body>
更新2:
我发现了我的错误:
当我调用方法generateNewName()
返回一个包含(日期)+(小时)+(毫秒)的字符串时,我认为这应该足以每次生成一个新名称但总是返回相同的名称,所以这样做每次都重写相同的文件。
对于给您带来的任何不便表示歉心,感谢您的帮助。
祝你好运, Valter Henrique。
答案 0 :(得分:1)
即使您已经确定了自己的问题(对您而言,我建议您自己发布这个问题的答案),我仍然建议您使用File#createTempFile()
来生成一个独特的问题文件名。这个Java SE提供的API保证在给定路径上创建一个唯一的文件。
以下是根据上传文件的名称/扩展名执行此操作的示例。
String fileName = FilenameUtils.getName(item.getName());
String fileNamePrefix = FilenameUtils.getBaseName(fileName) + "_";
String fileNameSuffix = "." + FilenameUtils.getExtension(fileName);
File file = File.createTempFile(fileNamePrefix, fileNameSuffix, dir);
item.write(file);
// ...
FilenameUtils
来自Commons IO,无论如何你应该已经在类路径中了,因为它是Commons FileUpload的必需依赖项。