Загрузка документа, указанного URL, в массив байтов - PullRequest
1 голос
/ 19 октября 2011

У меня есть html-форма с полем, которое будет принимать URL, указывающий на (возможно, двоичный) файл (например, изображение). URL может указывать на локальный ресурс, к которому сервер не может получить доступ, поэтому клиент должен получить его. (Эта выборка - еще один вопрос, мой вопрос касается написания сервлета.)

Я хочу загрузить результат этой выборки в сервлет Java (через запрос HTTP POST) и поместить его в массив байтов. Поскольку это низкоуровневое представление, я не уверен, должен ли я использовать Apache FileUpload.

Еще один момент, который меня смутил, это то, что FileItem s в FileUpload предоставляют только OutputStream, где я ожидал InputStream для чтения файла.

Я застрял после изучения FileUpload. Возможно, мне не хватает базовых знаний по разработке веб-приложений.

Как мне построить эту функциональность? Обратите внимание, что я новичок в этой области разработки Java (хотя мои общие (т.е. SE) навыки Java очень хороши).

Ответы [ 2 ]

1 голос
/ 19 октября 2011

Просто продолжайте использовать FileUpload, не изобретайте его самостоятельно. Это будет пустой тратой времени.

Я не уверен, почему вы думаете, что FileItem предоставляет только OutputStream, есть также метод getInputStream(). Просто напишите это в ByteArrayOutputStream.

InputStream input = fileItem.getInputStream();
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(input, output);
byte[] bytes = output.toByteArray();
// ...

Вам нужно только помнить, что это может взорвать использование памяти вашего сервера, если много пользователей загружают файлы одновременно. Каждый байт массива байтов потребляет один байт памяти JVM. Итак, представьте, что у вас есть 100 пользователей одновременно, которые загружают каждый файл размером 10 МБ, тогда 1 ГБ памяти сервера тратится на это.

0 голосов
/ 19 октября 2011

Если я правильно вас понимаю, вы просто пытаетесь получить файл, загруженный через HTTP в сервлете? Существует множество примеров того, как это сделать в сети, например, http://www.servlets.com/jservlet2/examples/ch04/UploadTest.java

Я что-то упускаю в вашем вопросе?

...