簡體   English   中英

為什么不能使用FileUpload上傳三個文件?

[英]Why can't upload three files with FileUpload?

我正在嘗試將三個圖像上傳到我的服務器,正在運行,但始終上傳用戶選擇的最后一個文件,而不是選擇的三個。

這是我的代碼:

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)+(milliseconds)的字符串時,我認為這足以每次生成一個新名稱,但總是返回相同的名稱,因此,這種方式每次都重寫相同的文件。

不便之處,敬請原諒。謝謝您的幫助。

最好的問候,Valter Henrique。

即使您確定了自己的問題(對您來說還是個好禮,我還是建議您自己回答這個問題),但我仍然建議您使用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的必需依賴項,因此無論如何您都應該在類路徑中擁有它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM