Во -первых, позвольте мне представить соответствующие технологии :
Два важных параметра в методе обслуживания.
ServletRequest использует его для получения запросов пользователей, а его функция:
Один из его Subinterfaces: javax.servlet.http.httpservletrequest
Servletresponse используется для возврата данных пользователю.
Один из его Subinterfaces: javax.servlet.http.httpservletresponse
Технология загрузки файлов:
Технология загрузки файлов относительно проста в загрузке технологии. Давайте возьмем загрузку снимков в качестве примера:
Сначала просмотрите картинки, а затем скачайте их
1. Фронт-элитный код:
<span style = "font-size: 14px;"> <a href = "img"> найти все изображения под папкой </a> <br/> </span>
Столь регистрации может быть сделана только в одном предложении. Непосредственно искать фоновые программы через web.xml
2. Код фонового отображения:
<span style = "font-size: 14px;"> public class showimg расширяется httpservlet {public void doget (httpservletrequest, httpservletresponse response) t Servletexception, ioexception {<span style = "Белое пространство: pre"> </span> Dopost (запрос, ответ); // Чтобы предотвратить исключения, соединить догет и Dopost вместе} </span> <span style = "font-size: 14px;"> public void dopost (httpservletrequest, htt pservletresponse response) IoException {request.setcharacterenceing ("utf-8"); "> <span style =" font-size: 14px; "> // <span style =" Белое пространство: pre "> </span> вызов сервистско При перечислении один за другим абсолютный путь к файлу требуется при использовании изображения </span> CERSTECTENTEXT = GETSERVLECTONTEXT (); String PATH = context.getRealPath ("/imgs"); // Найти абсолютный путь файла папки = новый файл (path); "> // <span style =" Белое пространство: pre "> </span> после поиска папки, перечислите все изображения для пользователей для просмотра строковых файлов [] = file.list (); for (string fn: файлы) {</span> <pre name = "code"> <span style = "font-size: 14px;"> // Показать все из них </span> String img = "<img src = 'imgs/"+fn+"'/>";
// out.print ("<a href = imgs/'"+fn+"'> скачать картинку </a>"); string str = "<a href = 'down? name = imgs/"+fn+"'> Загрузите изображение </a> "; // предоставить гиперссылку для загрузки, перенесите параметр --- Передача имя файла в содержимое ссылки пользователя и написать .print (str); out.print (img+" <br/ > ");}}
3. конкретная загрузка файлов
Во -первых, соответствующий протокол должен быть установлен. Протокол загрузки требует установки соответствующего заголовка загрузки
<span style = "Белое пространство: pre"> </span> <span style = "font-size: 18px;"> <strong> response.setContentType ("Приложение/Force-Download" </strong>);///// /Установите соответствующий заголовок </span> При загрузке вам нужно отобразить имя файла текущего изображения.
<span style = "font-size: 18px;"> <span style = "Белое пространство: pre"> </span> outputstream out = response.getOutputStream (); // Получить строку вывода String = Quecte st. getParameter ("name"); // Имя параметра, передаваемое из службы клиента IS int num = name.lastIndexof ("/"); "Utf- 8"); // Если китайцы должны быть перекодированы // system.out.println (aa); strong> вложение; Сделайте конкретную загрузку
<span style = "font-size: 18px;"> string filename = this.getServletContext (). getRealPath (имя); // Получить абсолютный путь, пройти имя файла и в то же время пройти абсолютный путь, который можно получить, и вы можете прочитать его inputstream в = new FileInputStream (имя файла); {out.write (b, 0, len); Изображение воспроизведения:
Рендеринг после нажатия:
Имя файла отличается
Технология загрузки файлов
Загрузить файлы самостоятельно будет очень хлопотно, поэтому мы можем использовать чужой пакет, чтобы загрузить ссылку и нажать, чтобы открыть форму ссылки:
Клиент должен использовать тип данных Multipart/Form Data, чтобы представлять тип составных данных при отправке HTTP.
То есть: <form enctype = "multipart/form-data">
Используйте <input type = "file" name = "somename"/> html тег в форме.
Требуется пакет:
Commons-fileUpload.jar, инструмент загрузки файла Core находится в этом пакете.
пакет Commons-io.jar, необходимый для загрузки файлов
Подробное объяснение:
DiskFileItemFactory - Создайте каталог файлов мониторинга времени, который относится к размеру области кэша
ServletFileUpload используется для анализа httpservletrequest. Возвращает набор файловых объектов.
FileItem представляет каждый объект файла, загруженный пользователем.
Основной процесс:
Файл F = новый файл ("f:/ex/temp"); // Укажите место временного хранилища файла
DiskFileItemFactory FF = новый DiskFileItemFactory (1024*1024*5, f); // Расположение размера и хранения временных файлов
ServletFileUpload SF = New ServletFileUpload (FF);
List <fieleTem> list = sf.parserequest (request); // запуск анализа
Для (FileItem It: List) {// Получить имя файла. И используйте UUID, чтобы решить проблему дублирования имен
Fileutils.copyinputstreamtofile (it.getInputStream (), новый файл (path+"/"+filename)); // в указанной папке, написанной
}
1. Код стойки регистрации:
<span style = "font-size: 18px;"> <h2> файл загрузки </h2> <form action = "upfile" method = "post" <span style = "color:#ff0000;"> ectype = "multipartart /form-data "</span >> // Это должно быть написано, в противном случае станция не может получить данные <!-это ectype =" multipart/form-data "---> file1 <input type =" file "< SPAN Style = "Color:#ff6666;"> name </span> = "file"/> <br/>, пожалуйста, введите имя: <input type = "text" <span style = "color:#ff6666;"> name </span> = "desc"/> <br/> file2 <input type = "file" <span style = "color:#ff6666;"> name </span> = "file"/> <br/> Пожалуйста, введите имя: <input type = "text" <span style = "color:#ff0000;"> name </span> = "desc"/> <br/> <input type = "Отправить" value = "Отправить "/> </form> </span>
2. Фоновый код:
2-1 Сначала создайте завод на основе жесткого диска для хранения временных файлов
// Укажите файл временного местоположения хранилища f = new File ("f:/ex/temp"); // указать временное местоположение хранилища diskfileitemfactory ff = new DiskFileItemFactory (1024*1024*5, f); // Размер Временное местоположение файлов и хранения2-2 Создайте объект ServletFileUpload и установите размер файла, чтобы максимизировать передачу файла
// Создать объект для анализа ServletFileUpload SF = New ServletFileUpload (FF); *20);
2-3 Начните анализировать объект
<span style = "Белое пространство: pre"> </span> list <fieletem> list = sf.parserequest (request); // Получить всю информацию, передаваемую со стойки регистрации, стойка регистрации должна заполнить ectype = " /form- Data "for (fileItem It: list) {it0 = it; // <span style =" Белое пространство: pre "> </span>, если это объект нормальной формы-вы можете напрямую судить, если (если ( it.isformfield ()) {// Это нормальный элемент формы, такой как type = name text value name = it.getString ("utf-8"); +name); // ниже имени написанного объяснения} else {<span style = "Белое пространство: pre"> </span> // Это имя файла, выбранное строкой на стойке регистрации = it.getName (); // Конкретный путь файла---ABSOLUTE // string str = it.getString (); // Содержимое в файле // system.out.println ("str"+str); .getContentType (); <pre name = "code" style = "font- размер: 18px;"> // <span style = "Белое пространство: pre"> </span> Имя файла ресурса на стороне сервера не может быть на китайском языке, в Браузер автоматически его кодирует ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------ Загруженное имя файла преобразуется в имя без китайского хранилища. Имя отображения должно быть сохранено, а затем преобразуется обратно при загрузке пользователя. // Имя карты string id = uuid.randomuuid (). ToString (). Replace ("-", ""); // единственный в мире UUID используется для // имени файла String lastname = name.substring (имя. LastIndexof (".")); // Формат файла // Форматы файлов имен все найден Дайте записать в соответствующее местоположение fileutils.copyinputstreamtofile (it.getInputStream (), новый файл (path+"/"+filename)); // path-абсолютный путь хранилища-определяемый предыдущим}
Это может достичь простых загрузок, но этот вид загрузки совсем небезопасна. Полный код прикреплен с незначительными проблемами для предотвращения общих проблем.
После выбора файла
Проверьте файлы на веб -сервере IMG, файл был загружен на страницу «Имя файла, сгенерированное UUID»
Загрузка файла исходный код:
<Span = "Font-Size: 14px;"> Java .util.List; .Apache .commons.fileUpload.fileItem; Apache.commons .io.fileutils; Нет ответа <span style = "Белое пространство: pre;"> </span> @override <span style = "белое пространство: pre;"> </span> защищенная void Doget (httpservletrequest req, http servletresponse resp) Span Style = "Белое пространство: pre;"> </span> бросает Servletexception, ioException {<span style = "Белое пространство: pre;"> </span> resp.setcontenttype ("utf-8"); Span Style = "Белое пространство: pre;"> </span> writer wr = resp.getwriter (); Поддерживается, но метод загрузки "); <span style =" белое пространство: pre; "> </span>} <span style =" Белое пространство: pre; "> </span> <span style =" Белое пространство : pre; "> </span> public void dopost (httpservletrequest, httpservletresponse response) <span style =" Белое пространство: pre; "> </span> бросает сервис. Pre; "); <span style =" белое пространство: pre; "> </span> printwriter out = response.getwriter (); <span style =" Белое пространство: pre; "> </span> // защищать до Нормальные формы метод загрузки 1: <span style = "Белое пространство: pre;"> </span> // возвращаемое значение get (null) post1 (apllication/x-form-urlencoded, нормальная форма) post2 (файл: multipart/ Form- Data, форма загрузки файла) // <span style = "Белое пространство: pre;"> </span> string type = request.getcontenttype (); > </span>if(!type.contains("mulitpart/form-data ")) {// <span style =" Белое пространство: pre; "> </span> out.write (" Не поддерживайте загрузку нормальных форм 2 "); // <span style =" белое пространство: pre; "> </span> return; // <span style =" белое пространство: pre; "> </span>} <span Style = "Белое пространство: pre;"> </span> // Метод 2 <span style = "Белое пространство: pre;"> </span> boolean boo = servletfileupload.ismultipartcontent (запрос); "Белое пространство: pre;"> </span> if (boo == false) {<span style = "Белое пространство: pre;"> </span> out.print ("upload 1 из нормальных форм не является Поддерживается "); <span style =" белое пространство: pre; "> </span> <span style =" Белое пространство: pre; "> </span>} <span style =" Белое пространство: pre; "> </span>} span> <span style =" Белое пространство: pre; "> </span> // Указание временного местоположения хранения <span style =" Белое пространство: pre; "> </span> файл f = новый файл ("f:/ex/temp"); // указать местоположение временного хранилища файлов <span style = "белое пространство: pre;"> </span> diskfileitemfactory ff = new DiskFileItemFactory (1024*1024* 5, f); // Временный размер файла и местоположение хранилища <span style = "Белое пространство: pre;"> </span> <span style = "белое пространство: pre;"> </span> // crote Объект для анализа <span style = "Белое пространство: pre;"> </span> Servletfileupload sf = new ServletFileUpload (ff); (1024*1024*10); // Максимальное значение только одного места хранения составляет 10 м <span style = "Белое пространство: pre;"> </span> sf.setsizemax (1024*1024*20);/// /Максимальное значение всех файлов составляет 20 м <span style = "Белое пространство: pre;"> </span> String Path = this.getServletContext (). GetRealPath ("/imgs"); Пространство: pre; "> </span> system.out.println (" Путь хранения: "+path); <span style =" белое пространство: pre; "> </span> // start parsing <span style = "Белое пространство: pre;"> </span> fileitem it0 = null; // используется для удаления временных файлов в наконец <span style = "белое пространство: pre;" «Белое пространство: pre;»> </span> list <fieletem> list = sf.parserequest (request); // Получить всю информацию, передаваемую со стойки регистрации, стойка регистрации должна заполнить ectype = "Multipart/form- data "<span style =" белое пространство: pre; "> </span> for (fileitem it: list) {<span style =" белое пространство: pre; "> </span> it0 = it; <span style = "Белое пространство: pre;"> </span> if (it.isformfield ()) {//-обычный элемент формы, такой как тип = текстовое значение имени <span style = "Белое пространство: pre ; "> </span> string name = it.getString (" utf-8 "); <span style =" Белое пространство: pre; "> </span> system.out.println (" Основное имя элемента формы: "+name); // написано ниже имени объяснения <span style =" Белое пространство: pre; "> </span>} else {<span style =" Белое пространство: pre; "> </ span> string name = it.getName ();//конкретный путь файла // <span style = "Белое пространство: pre;"> </span> string n1 = it.getfieldname (); «Белое пространство: pre;»> </span> string str = it.getString (); // Содержимое в файле // <span style = "Белое пространство: pre;"> </span> Система. out.println ("str"+str); -Посей: pre; "> </span> string contentType = it.getContentType (); <span style =" Белое пространство: pre; "> </span> long size = it.getsize (); <span style = «Белое пространство: pre;»> </span> // предотвратить файл от пустого <span style = "Белое пространство: pre;"> </span> if (size == 0) {<span style = " Белое пространство: pre; "> </span> продолжение; // Файл пуст, вернуть напрямую; <span style =" Белое пространство: pre; "> </span>} <span style =" Белое пространство : pre; "> </span> // Имя пользователя. Вы должны заполнить <span style = "белое пространство: pre;"> </span> if (name == null || name.trim () == "") {<span style = "Белое пространство: pre ; «Белое пространство: pre;»> </span> system.out.println (name+","+contentType+","+size); / Имя файла ресурса на стороне сервера не может быть на китайском языке, браузер автоматически его кодирует ---------------------------------------------- ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ -------> </span> // Чтобы пользователи могли восстановить свое исходное имя при загрузке, они должны сохранить переписку между исходным именем файла и именем сопоставления и конвертируют его обратно при загрузке пользователя. pre; "> </span> // mapping name <span style =" белое пространство: pre; "> </span> string id = uuid.randomuuid (). ); (".")); </span> String FileName = ID+LastName; Пусть он записывает в соответствующее местоположение <span style = "Белое пространство: pre;"> </span> fileutils.copyinputstreamtofile (it.getinputstream (), новый файл (path+"/"+filename));} <стиль Span = "Белое пространство: pre;"> </span>}} catch (fileuploadexception e) {<span style = "Белое пространство: pre;"> </span> бросить новое runtimeexception ("ошибка загрузки файла." + e); Span Style = "Белое пространство: pre;"> </span> it0.delete (); // удалить временный файл <span style = "белое пространство: pre;"> </span>}} out.close ( );}} </span> <span style = "font-size: 18px;"> </span> Скачать файл. Исходный код: [html] View plaincopyprint? <span style = "font-size: 14px;"> пакет CN .hncu.downimg; Сервис Ответ ответа) бросает ServletExcte on, ioException {dopost (запрос, ответ); Отправить имя пользователя на стойку регистрации/*Передача фиксированной строки имени пользователя aa = "1.jpg"; // Если это на китайском языке, вам нужно кодировать aa = urlencoder.encode (aa, "utf-8"); response.setheader ("content-disposition", "Attactment; filename = '"+aa+"'"); ///// Вы должны добавить «вложение;», в противном случае он станет просмотром*/outputstream out = ответ. getOutputStream (); // Получить выходной поток name = запрос. substring (num+1); Расположение "," ATTHAMENT; FILENAME = '"+AA+"' "); // Обратите имя файла, передаваемое оттуда, чтобы его можно было загрузить при хранении строкового файла = this.getServletContext (). GetRealPath (name); // Получить абсолютный путь введите поток в = новый файл. write (b, 0, len);}}} </span> <span style = "font-size: 18px;"> </span>Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.