Почему нельзя загрузить три файла с помощью FileUpload? - PullRequest
2 голосов
/ 06 марта 2011

Я пытаюсь загрузить три изображения на мой сервер, работает, но загружаю всегда последний выбранный пользователем файл, а не три выбранных.

Вот мой код:

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(), вернуть строку, содержащую (дата) + (час) + (миллисекунды), я думаю, этого должно быть достаточно для создания нового имени каждый раз, но всегда возвращает одно и то же имя, поэтому таким образом каждый раз перезаписывается один и тот же файл.

Извините за любыенеудобства и спасибо ребята за помощь.

С уважением, Вальтер Энрике.

1 Ответ

1 голос
/ 06 марта 2011

Даже если вы решили свою собственную проблему (спасибо вам, я бы посоветовал опубликовать ответ на этот вопрос самостоятельно), я все равно хотел бы рекомендовать вместо этого использовать File#createTempFile() уникальное имя файла. Этот API, предоставляемый Java SE, гарантирует создание уникального файла по указанному пути.

Вот пример, который делает это на основе имени / расширения загруженного файла.

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.

...