Файл Java в FileItem - PullRequest
       15

Файл Java в FileItem

0 голосов
/ 26 июля 2011

Как я могу преобразовать Файл Тип в FileItem Тип в сервлете?

File file = new File("/home/kunal/Desktop/docs");        
File[] files = file.listFiles();

Я хочу преобразовать файлы в FileItem Type.

Спасибо

Ответы [ 2 ]

4 голосов
/ 26 июля 2011

Я думаю, здесь есть серьезное недоразумение.

Согласно комментариям:

ранее я использовал элемент управления FileUpload, в котором я использовал тип FileItem. но теперь мне нужно использовать тип файла для массовой загрузки , поэтому я хочу преобразовать файл в FileItem.

Вы, очевидно, используете браузер MSIE для тестирования своего веб-приложения. MSIE неправильно работает, так как отправляет полный путь к файлу, а не только имя файла для элемента управления <input type="file">. И вы, очевидно, находитесь на стороне сервера, создавая File на основе базовой папки с файлами на стороне клиента и пытаясь вызвать listFiles() для нее, чтобы получить список всех файлов в файловой системе на стороне клиента, чтобы вы могли выполнить «массовую загрузку». "их.

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

Смотри также:


Что касается вашего конкретного функционального требования, я понимаю, что вы хотите иметь возможность позволить клиенту выбрать папку, а затем отправить все файлы в этой папке на сторону сервера. Это действительно не поддерживается элементом управления HTML4 <input type="file">, который позволяет выбирать только один файл. Однако, если вы нацелены на браузеры HTML5 (FF> = 3.6, Chrome> = 2, Safari> = 4), вы можете использовать атрибут multiple

<input type="file" name="upload" multiple="multiple" />

Но если вы хотите также поддерживать более старые браузеры (и MSIE), вам лучше всего выбрать Flash или Java-апплет, чтобы иметь возможность выбрать папку или несколько файлов. Например: Uploadify , SWFUpload , JUpload и JumpLoader .

Несмотря на это, код сервлета должен не быть изменен каким-либо образом. Он должен просто использовать API-интерфейс FileUpload Apache Commons, как вы это делали раньше. Он отлично подойдет для HTML5 multiple, Flash и Java-апплетов. Разница лишь в том, что теперь вы получаете несколько FileItem объектов, по одному на каждый загруженный файл.

Смотри также:

1 голос
/ 26 июля 2011

Если я правильно понимаю, похоже, что вы пытаетесь загрузить файл в свой сервлет с помощью Apache Commons FileUpload. Хотя это не дает прямого ответа на ваш вопрос, вы можете попробовать использовать аннотацию @MultipartConfig, а не Apache Commons.

@MultipartConfig
public class Foo extends HttpServlet{
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         Part p = request.getPart("uploadInput");

}

Затем вы можете сделать p.getInputStream () для чтения в файле, где «uploadInput» - это элемент загрузки на вашей HTML-странице. Затем вы можете вручную создать из этого объекты File или сделать все, что вам нужно. Это имеет дополнительное преимущество, заключающееся в том, что вы не используете стороннюю библиотеку, что иногда может быть неудобно.

...