1. Принцип загрузки файла
1. Предварительные условия для загрузки файлов:
а Метод формы должен быть
беременный Enctype формы формы должен быть Multipart/Form-Data (он определяет метод запроса post и тип данных корпуса запроса)
в Тип ввода, приведенный в форме, - это домен загрузки файла.
2. Используйте сторонние компоненты для достижения загрузки файлов
1. Компонент Commons-FileUpload:
JAR: Commons-FileUpload.jar
Commons-IO.Jar
2. Core Class или интерфейс
DiskFileItemFactory: установите окружающую среду
Public void setSizethershold (int sizethreshold): установите размер буфера. По умолчанию 10 КБ.
Когда загруженный файл превышает размер буфера, компонент FileUpload загрузит файл, используя временный кэш файла
public void setRepository (java.io.file Repository): установите каталог, где хранятся временные файлы. По умолчанию временный каталог хранилища системы системы.
ServletFileUpload: класс загрузки ядра (основная функция: анализируйте содержание тела запроса)
Boolean IsmultipartContent (httpservletrequest? Запрос): определяет, является ли Enctype формы пользователя из типа Multiplet/Form-Data.
Список Parserequest (запрос httpservlectrequest): анализируйте контент в корпусе запроса
SetFilesizeMax (4*1024*1024); // Установите размер одного загруженного файла
upload.setsizemax (6*1024*1024); // Установить общий размер файла
FileItem: представляет поле ввода в форме.
Boolean isformfield (): это нормальное поле
String getFieldName: Получите имя поля обычного поля
String getString (): получить значение нормального поля
InputStream getInputStream (): Получите входной поток загруженных полей
String getName (): получить загруженное имя файла
Пример: сначала создайте файловую папку в каталоге Web-Inf, то есть все файлы должны быть загружены здесь, чтобы избежать прямого доступа другим.
1. Получите реальный путь файлов
String storePath = getServletContext (). GetRealPath ("/web-inf/files");
2. Настройте окружающую среду
DiskFileItemfactory Factory = new DiskFileItemFactory (); // где находится кэш по умолчанию и временное хранилище файлов
3. Метод доставки формы суда
Boolean Ismultipart = ServletFileUpload.ismultipartContent (запрос); if (! ismultipart) {System.out.println («Метод загрузки неправильно!»); возвращаться; }4. Класс ядра загрузки файла.
ServletFileUpload upload = new ServletFileUpload (Factory); 5. Analyze // Parse List <fieTem> items = upload.parserequest (request); Для (FileItem item: items) {if (item.isformfield ()) {// нормальное поле, строка FieldName, представленное Form = item.getFieldName (); // Имя поля формы Информация Строка FieldValue = item.getString (); // Система значения поля формы. } else // обработка файлов {inputStream in = item.getInputStream (); // Имя файла загрузки c:/users/administrator/desktop/a.txt name = item.getname (); // просто нужен A.Txt String FileName = name.substring (name.lastIndexof ("//")+1); // Создание выходного потока String Storefile = storePath+"//"+fileName; // загружать адрес файла save outputStream out = new FileOutputStream (StoreFile); байт [] b = новый байт [1024]; int len = -1; while ((len = in.read (b))! =-1) {out.write (b, 0, len); } in.close (); // Закройте поток out.close (); }}Напишите форму
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%string path = request.getContextPath (); string basePath = request.getScheme ()+": //"+request.getServername ()+":"+request.getSerperport () phate+"/";%> <t) <). "// W3C // DTD HTML 4.01 Transitional // en"> <html> <Head> <base href = "<%= basepath%>"> <Title> my jsp '1.jsp' Starting page </title> <meta http-equiv = "pragma" content = "no-cache"> <meta htttp-equiv = "pragma" = "no-cache"> <meta htttp-equiv = "pragma". content = "no-cache"> <meta http-equiv = "истекает" content = "0"> <meta http-equiv = "Keywords" Content = "Keyword1, Keyword2, Keyword3"> <Meta http-equiv = "Описание" content = "Это моя страница"> <!-<link relshiet "type =" text/conts " href = "styles.css">-> </head> <body> <form action = "$ {pagecontext.request.contextPath}/servlet/uploadservlet2" method = "ectype =" multipart/form-data "> username <input type =" text "=" username "/> <brbr/> <input yourseme <input =" text "=" username "/> <brbr/> <input inpit =" "text" = "username"/> <brbr/> <input input = " name = "f1"/> <br/> <input type = "file" name = "f2"/> <br/> <input type = "propect" value = "save"/> </form> </body> </html>Напишите сервлет отправки: uploadservlet2
Пакет com.liuzhen.upload; import java.io.fileoutputstream; import java.io.ioexception; import java.io.inputstream; импорт java.io.outputstream; импорт java.util.list; import.servlet.servletexcept javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; импорт org.apache.commons.fileupload.fileitem; импорт org.apache.commons.fileupload.fileuadexception; org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;//Introduction to file upload public class UploadServlet2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IoException {// Установить запрос кодирования.setchAracterencoDing ("UTF-8"); response.setContentType ("text/html; charset = utf-8"); try {// загрузить файл string storepath = getservletcontext (). getRealpath ("/web-inf/files"); // Установить окружающую среду diskfileitemfactory factory = new DiskFileItemFactory (); // Судья Форма Метод передачи Форма ectype = Multipart/Form-Data Boolean Ismultipart = ServletFileUpload.ismultipartContent (запрос); if (! ismultipart) {System.out.println («Метод загрузки неверен!»); возвращаться; } ServletFileUpload upload = new ServletFileUpload (Factory); // parse list <fieleItem> items = upload.parserequest (request); Для (FileItem item: items) {if (item.isformfield ()) {// нормальное поле, строка FieldName, представленное Form = item.getFieldName (); // Имя поля формы Информация Строка FieldValue = item.getString (); // Система значения поля формы. } else // обработка файлов {inputStream in = item.getInputStream (); // Имя файла загрузки c:/users/administrator/desktop/a.txt name = item.getname (); // просто нужен A.Txt String FileName = name.substring (name.lastIndexof ("//")+1); // Создание выходного потока String Storefile = storePath+"//"+fileName; // загружать адрес файла save outputStream out = new FileOutputStream (StoreFile); байт [] b = новый байт [1024]; int len = -1; while ((len = in.read (b))! =-1) {out.write (b, 0, len); } in.close (); // Закройте поток out.close (); }}} catch (fileuploadexception e) {бросить новый runtimeexception (e); }} public void dopost (httpservletrequest -запрос, httpservletresponse response) throws servletexception, ioexception {Doget (запрос, ответ); }}Загруженный файл находится в приложении Tomcat.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.