【问题标题】:Why can't upload three files with FileUpload?为什么不能使用文件上传上传文件?
【发布时间】:2011-07-09 14:56:32
【问题描述】:

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

这是我的代码:

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) {
        }
    }
}

-- 更新:

<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() 返回一个包含 (date)+(hour)+(miliseconds) 的字符串时,我认为这应该足以每次生成一个新名称但总是返回相同的名称,所以这样重写每次都是同一个文件。

很抱歉给您带来不便,感谢大家的帮助。

最好的问候, 瓦尔特·恩里克。

【问题讨论】:

  • 您是否调试过List items = uploadHandler.parseRequest(request) 行以查看request 是否带有3 个文件?你也可以发布你的 html/jsp 代码吗?
  • Valter,上传的文件完好吗?含义:你说只有第三个文件被上传;这与用户上传的文件相同还是被破坏了?
  • @bluefoot 我没有调试我的代码,但我放了一些'system.out',这一切都很好,没有异常被启动。我要发布我的jsp代码
  • @Guss ,文件是相同的,我的意思是,完整的,这种上传文件的方法已经可以上传文件,但是现在我需要上传三个文件,而不是一个。遵循它应该以这种方式工作的逻辑,但事实并非如此=)
  • 大家好,我终于发现我的错误了,抱歉打扰你=)

标签: java jsp servlets file-upload apache-commons-fileupload


【解决方案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 的必需依赖项。

【讨论】:

    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2021-05-01
    相关资源
    最近更新 更多