multipart / form-data не работает с сервлетами - PullRequest
0 голосов
/ 03 декабря 2011

Я не совсем уверен, почему html-форма с тегом enctype = "multipart / form-data" не пропускает объекты, которые она должна пропустить.это случай с mozilla и firefox.

для случая с IE, например, я использую html control для выбора файла, он получает то, что должен получить.

Теперь я простоЯ хочу знать, есть ли какие-либо альтернативы, которые я могу использовать для передачи файлов через объект http-запроса, потому что enctype = "multipart / form-data", похоже, имеет некоторые проблемы с совместимостью, но я не совсем уверен,

любойпредложения будут оценены!: D

Ответы [ 2 ]

3 голосов
/ 03 декабря 2011

Прежде всего, вы должны предоставить немного кода, чтобы показать, что вы сделали, и узнать, что пошло не так. В любом случае, я предполагаю, что вы должны загрузить файл на сервер, используя элемент управления загрузкой файлов HTML.

Загрузка файла или, скажем, multipart/form-data поддержка типа кодирования не реализована в реализации HttpServlet. Итак, request.getParameter() не работает с multipart/form-data. Вы должны использовать дополнительные библиотеки, которые обеспечивают поддержку для этого. Apache Commons File Upload является хорошим примером. Их руководство с помощью fileupload поможет вам начать работу с библиотекой. Вот простой пример (составлен с использованием руководства по загрузке файлов).

// Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request);

if (isMultipart) {
    // Create a factory for disk-based file items
    FileItemFactory factory = new DiskFileItemFactory();

    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);

    // Parse the request
    List /* FileItem */ items = upload.parseRequest(request);

    // Process the uploaded items
    Iterator iter = items.iterator();
    while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();

        if (item.isFormField()) {
            // Process form field.
            String name = item.getFieldName();
            String value = item.getString();
        } else {
            // Process uploaded file.
            String fieldName = item.getFieldName();
            String fileName = item.getName();
            String contentType = item.getContentType();
            boolean isInMemory = item.isInMemory();
            long sizeInBytes = item.getSize();

            if (writeToFile) {
                File uploadedFile = new File("path/filename.txt");
                item.write(uploadedFile);
            }
        }
    }
} else {
    // Normal request. request.getParameter will suffice.
}
1 голос
/ 05 декабря 2011

получил это. если у кого-то еще может быть такая проблема, то это была моя проблема. я проверил тип содержимого файла для себя, чтобы убедиться, что переданные объекты имеют определенный тип. в IE он возвращает application / x-zip-сжатые, ТОЛЬКО ДЛЯ IE, но mozilla и chrome, похоже, возвращают другой тип содержимого для zip-файла, который является application / octet-stream.

, поэтому я просто добавил application / octet-stream к допустимым типам файлов, и теперь он работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...