Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';你不能用FileUpload上传三个文件吗?_Java_Jsp_Servlets_File Upload_Apache Commons Fileupload - Fatal编程技术网

Java 为什么可以';你不能用FileUpload上传三个文件吗?

Java 为什么可以';你不能用FileUpload上传三个文件吗?,java,jsp,servlets,file-upload,apache-commons-fileupload,Java,Jsp,Servlets,File Upload,Apache Commons Fileupload,我正在尝试将三个图像上载到我的服务器,正在工作,但始终上载用户选择的最后一个文件,而不是所选的三个文件 这是我的密码: protected void doPost(HttpServletRequest request, HttpServletResponse response){ boolean multipart = ServletFileUpload.isMultipartContent(request); if (multipart) { DiskFile

我正在尝试将三个图像上载到我的服务器,正在工作,但始终上载用户选择的最后一个文件,而不是所选的三个文件

这是我的密码:

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) {
        }
    }
}
-- 更新:


上传



更新2:

我发现了我的错误: 当我调用方法
generateNewName()
返回一个包含(日期)+(小时)+(毫秒)的字符串时,我认为这应该足以每次生成一个新名称,但总是返回相同的名称,所以这样每次都重写相同的文件

很抱歉给你们带来不便,谢谢你们的帮助

致以最良好的祝愿,
Valter Henrique。

尽管您已经解决了自己的问题(很荣幸,我建议您自己发布一个关于这个问题的答案),但我还是建议您使用它来生成一个唯一的文件名。这个JavaSE提供的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的必需依赖项。

您是否调试了行
List items=uploadHandler.parseRequest(request)
以查看
request
是否附带3个文件?你也可以发布你的html/jsp代码吗?瓦尔特,上传的文件是完整的吗?意思是:你说只有第三个文件被上传;这和用户上传的文件是一样的还是弄坏了?@bluefoot我没有调试我的代码,但我放了一些“system.out”,没关系,没有异常。我要发布我的jspcode@Guss,文件是相同的,我的意思是,完整的,这种上传文件的方法已经可以上传一个文件了,但是现在我需要上传三个文件,而不是一个。按照逻辑它应该是这样工作的,但不是它所发生的=)嘿,伙计们,我终于发现了我的错误,对不起打扰你=)
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);
// ...