2

サーバーに 3 つの画像をアップロードしようとしていますが、動作していますが、選択した 3 つではなく、ユーザーが最後に選択したファイルを常にアップロードします。

これが私のコードです:

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) を含む文字列が返されます。毎回新しい名前を生成するにはこれで十分だと思いますが、常に同じ名前を返すので、この方法で毎回同じファイルを書き換えます。

ご迷惑をおかけして申し訳ありませんが、助けていただきありがとうございます。

よろしく、ヴァルター・エンリケ。

4

1 に答える 1

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 FileUpload の必須の依存関係であるため、とにかくクラスパスに既にあるはずの Commons IO からのものです。

于 2011-03-06T00:53:48.503 に答える