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