Хранение изображения с использованием htm input type = file - PullRequest
0 голосов
/ 05 ноября 2010

Здравствуйте, я создаю веб-приложение (интернет-магазин), где администратор может загрузить новый продукт.Одним из типов ввода является файл (изображение продукта). Я хочу, чтобы изображения продуктов были сохранены в папке, и каждому продукту будет соответствовать изображение в таблице базы данных.

Мой вопроскак работает тип ввода = файл?Я до сих пор не понимаю, как при отправке формы сервлет вставит изображение в папку веб-страницы и как будет получено значение (имя изображения) для сохранения в таблице базы данных?

Для других входов я использую «значение», чтобы получить информацию.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 05 ноября 2010

В Java трудно справиться с загрузкой файлов. Но есть много библиотек, которые делают это. Самый популярный из них - Apache Commons File Uploads Вот пример, как это сделать в Java:

DiskFileItemFactory factory = new DiskFileItemFactory();

// Set factory constraints
factory.setSizeThreshold(yourMaxMemorySize);
factory.setRepository(yourTempDirectory);

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

// Set overall request size constraint
upload.setSizeMax(yourMaxRequestSize);

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

Есть еще много опций, с которыми вам стоит поиграть.

1 голос
/ 05 ноября 2010

как работает тип ввода = файл?

Используется в кодировке <form> с кодировкой multipart/form-data. После выбора файла и отправки формы содержимое файла становится частью тела HTTP-запроса. В сервлете он доступен как «необработанные» данные по request.getInputStream(). В контейнерах сервлетов, поддерживающих только сервлет 2.5 или более ранней версии, не было предоставленного API-средства для анализа данных. Apache Commons FileUpload является стандартом де-факто. Начиная с сервлета 3.0 вы можете использовать предоставляемый API request.getParts() для этого, который находится под прикрытием с использованием лицензионной копии Commons FileUpload.

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

Я до сих пор не понимаю, как при отправке формы сервлет вставит изображение в папку веб-страницы и как будет получено значение (имя изображения), которое будет сохранено в таблице базы данных

Вас должно интересовать не только имя файла. Вы также должны быть заинтересованы в файле содержание . Какой бы способ вы ни выбрали для анализа загруженного файла из тела запроса, вы должны получить содержимое файла в формате InputStream или byte[]. Вы можете записать его в файловую систему локального диска с помощью FileOutputStream и сохранить уникальное имя файла в БД обычным способом JDBC.

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

0 голосов
/ 05 ноября 2010

Когда файл загружается на веб-сервер, обычно включается следующая информация (или аналогичная):

Content-Disposition: form-data; name="fileInput"; filename="myFile.txt"
Content-Type: application/octet-stream

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

Если вы используете такую ​​программу, как Fiddler , вы точно увидите, что происходит, когда загружаете файл.

...