В Javaweb загрузка и загрузка - обычная функция. Для загрузки файлов браузер передает файл на сервер в процессе загрузки файла в процесс потоковой передачи. Как правило, пакет Commons-FileUpload используется для реализации функции загрузки. Поскольку Commons-FileUpload зависит от пакета Commons-IO, вам необходимо загрузить эти два пакета Commons-FileUpload-1.2.1.jar и Commons-IO-I-1.3.2.jar.
1. Создайте окружающую среду
Создайте веб -проект и импортируйте пакет в Project Lib
2. Реализация загрузки файла
(Первый метод загрузки)
Создайте новую страницу opload.jsp
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"-// w3c // dtd html 4.01 // en «http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> file wtember> </head> <body> <! the absolute path to the project, which means that no matter where you copy the project to in the future, it will find the exact path--> <form action="<%=request.getContextPath()%>/uploadServlet" enctype="multipart/form-data" method="post"> <span>Select file: </span><input type="file" name="file1"> <input type="submit" value="upload"> </form> </body> </html>
Создайте новый сервлет, который обрабатывает загрузку файлов
пакет com.load; импорт java.io.file; import java.io.ioexception; import java.util.list; import javax.servlet.servletcontext; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.htplet. 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; @Webservlet ("/uploadServlet") открытый класс uploadservlet extends httpservlet {private static final long serialversionuid = 1l; public uploadservlet () {super (); } /* В пакете FileUpload комплексные элементы формы в HTTP -запросе рассматриваются как объект FileItem; * The FileItem object must be parsed by the parseRequest() method in the ServletFileUpload class* (that is, the wrapped HttpServletRequest object), that is, the specific text form and upload file are separated* */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Use Метод ismultipartContent (): анализировать, есть ли запросы по файлам в запросе, Boolean Ismultipart = ServletFileUpload.ismultipartContent (запрос); if (ismultipart) {// Создать установленные дисковые узлы Diskfileitemfactory factory = new DiskFileItemFactory (); // Получить контекстную информацию запроса ServletContext ServletContext = request.getServletContext (); // каталог кэша, каждый серверный файл каталога Repository = (file) servletContext.getAttribute ("javax.servlet.context.tempdir"); // Установите фабрику каталогов кэша сервера.setRepository (Repository); // Создание объекта ServletFileUpload должно зависеть от FileItemFactory // Завод сохраняет полученный объект FileItem upload на жесткий диск сервера, то есть объект DiskFileItem. ServletFileUpload upload = new ServletFileUpload (Factory); Try {// Проанализировать объект httpservletRequest после обертывания, который должен разделить текстовые формы и загружать файлы (HTTP -запросы будут завершены как httpservlectrequest) list <fieTiTem> items = upload.parseRequest (request); для (FileItem Item: элементы) {String fieldName = item.getFieldName (); String fileName = item.getName (); String contentType = item.getContentType (); Boolean Isinmemory = item.isinmemory (); long sizeinbytes = item.getSize (); // создание файла // request.getRealpath (get the Real Path) файл файла = новый файл (request.getRealpath ("/")+"/loads"+filename.substring (filename.lastindexof ("//")+1, filename.length ())); item.write (file); }} catch (fileuploadexception e) {e.printstacktrace (); } catch (Exception e) {e.printstackTrace (); }}} Protected void Dopost (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {Doget (запрос, ответ); }}(Второй метод загрузки)
Создайте новую страницу JSP (так же, как указано выше, просто изменяется путь)
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"-// w3c // dtd html 4.01 // en «http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> file wtember> </head> <body> <! the absolute path to the project, which means that no matter where you copy the project in the future, it will find the exact path--> <form action="<%=request.getContextPath()%>/uploadservlet1" enctype="multipart/form-data" method="post"> <span>Select file: </span><input type="file" name="file1"> <input type="submit" value="upload"> </form> </body> </html>
Создайте сервлет для обработки загрузки
пакет com.load; импорт java.io.file; import java.io.fileoutputstream; импорт java.io.ioexception; import java.io.inputstream; импорт java.io.outputstream; import javax.servlet.servletexception; импорт javax.servlet.annatation.multipartconfig; javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; импорт javax.servlet.http.httpserserponse; javax.servlet.http.part; @webservlet ("/uploadservlet1")@multiplonfig (location = "") public class uploadservlet1 расширяет httpservlet {private static final long serialversionuid = 1L; public uploadServlet1 () {super (); } Защищенный void Doget (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {response.setContentType ("text/html; charset = utf-8"); request.setcharacterencoding ("UTF-8"); // Получить файл загрузки и прочитать часть части файла part = request.getPart ("file1"); // Определите переменную для получения имени файла string fileName = null; // Контент-дискозиция: оно должно предоставить имя файла по умолчанию, когда пользователь хочет сохранить запрошенный контент в качестве файла // Контент-дисспозиция: сообщите браузеру открыть файл путем загрузки для (строковое содержимое: part.getheader ("content-disposition"). Split (";")) {system.out.println ("content); // Получить имя файла if (content.trim (). StartSwith ("filename")) {// перехватить имя файла файла = content.substring (content.indexof ('=') + 1) .trim (). Replace ("/" "," ");}} // outputStream out out SystemSe/null SystemStempre -wontStreme = nullseSparator = nullseSparator; Разделение и другие данные = New FileOutputStream (New File ("E:/Loads" + File.Separator + FilenAme); } System.out.println ("Новый файл" + filename + "Создан в" + "/loads");(Третий метод загрузки)
Пакет JSPSMartuPload используется здесь для загрузки и загрузки. Автор считает, что такая загрузка и загрузка относительно просты, но, похоже, многие люди не используют ее и не понимают ее.
Создайте HTML -страницу
<! Doctype html> <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> file upload </title> </head> <body> <p> </p> <p align = "> upload file selection </p> </p>" actionAd ". enctype="multipart/form-data"> <table align="center"> <tr><td><div align="center"> 1.<input type="file" name="file1" > </div></td></tr> <tr><td><div align="center"> 2.<input type="file" name="file2" > </div></td></tr> <tr><td><div align="center"> 3.<input type="file" name="file3" > </div></td></tr> <tr><td><div align="center"> <input type="submit" name="Submit" value="upload him"> </div></td></tr> </table> </form></body></html>
Создайте сервлет для обработки файлов загрузки
пакет com.load; импорт java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httperservlet; import javax.servlet.http.httplecervlet; import javax.servlet.httplet javax.servlet.http.httpservletresponse; import javax.servlet.jsp.jspfactory; import javax.servlet.jsp.pagecontext; import com.jspsmart.upload.file; import com.jspsmart.upload.smartupload; com.jspsmart.upload.smartuploadexception; @webservlet ("/douploadservlet") Public Class Downervlet Extends httpservlet {Private Static Long LongerVerionuid = 1L; public downloadservlet () {super (); } Защищенный void Doget (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {response.setContentType ("text/html; charset = utf-8"); Printwriter Out = response.getWriter (); // Создать новый интеллектуальная загрузка объекта Smartupload su = new SmartUpload (); / * * PageContext PageContext; HTTPSession Session; Application ServletContext; ServletConfig Config; Jspwriter out; Объект страница = это; Запрос httpservletrequest, httpservletresponse ответ, где объект страницы, запрос и ответ были созданы экземпляры, в то время как другие 5 объектов, которые не создаются, создаются следующим образом pagecontext = jspxfactory.getPageContext (этот, запрос, ответ, нулевый, верный, 8192, true); */// Получить контекстную среду через фабрику JSP PageContext pageContext = jspfactory.getDefaultFactory (). GetPageContext (это, запрос, ответ, null, true, 8192, true); // загружать инициализировать su.initialize (pagecontext); // загрузить файл try {su.upload (); // Сохранить файл загрузки в указанный каталог int count = su.save ("/share"); out.println (count+"Загрузка файла успешно! <br>"+su.tostring ()); } catch (smartuploadexception e) {e.printstacktrace (); } // Извлекать информацию о загрузке файла один за другим для (int i = 0; i <su.getFiles (). GetCount (); i ++) {file file = su.getFiles (). GetFile (i); // Если файл не существует, если (file.ismissing ()) продолжите; // показать текущую информацию о файле out.println ("<table border = 1>"); out.println ("<tr> <td> Имя элемента формы (FieldName) </td> </td>"+file.getFieldName ()+"</td> </tr>"); out.println ("<tr> <td> Длина файла </td> <td>"+file.getSize ()+"</td> </tr>"); out.println ("<tr> <td> имя файла </td> <td>"+file.getFilename ()+"</td> </tr>"); out.println ("<tr> <td> имя файла </td> <td>"+file.getFilename ()+"</td> </tr>"); out.println ("<tr> <td> расширение файла </td> <td>"+file.getfileext ()+"</td> </tr>"); out.println ("<tr> <td> файл полное имя </td> <td>"+file.getFilePathName ()+"</td> </tr>"); out.println ("</table> <br>"); }} / ** * @see httpservlet#dopost (httpservletrequest, httpservletresponse response) * / Защищенный void dopost (httpservletrequest, httpservletresponse response) throws vervletexception, ioexception {// todo auto-generated method stube-stube (ratexception, ratese); }} Примечание: код int count = su.save ("/share"); Означает, что вам нужно сначала создать папку, чтобы сначала можно было создать одну в веб -сайте, а затем сменить проект, а затем передать ее, папка будет создана на стороне запуска!
Или вы можете напрямую найти путь для запуска и создания папки Share.
3. Реализуйте загрузку файла
(Первый файл скачать)
Примечание. Этот код напрямую обращается к классу сервлета
Пакет com.load; импорт java.io.fileinputstream; import java.io.ioexception; импорт java.io.inputstream; import java.io.outputstream; импорт javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.htttp.httplet.annotation.webservlet; import javax.servlet.htttp.htt javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; // непосредственно использовать http: // localhost: 8080/test1/загрузка для загрузки, но это ошибочно. Если в названии файла загрузки есть китайцы, он станет искаженным! @Webservlet ("/скачать") public class Download Extends httpservlet {private static final long serialversionuid = 1l; public Download () {super (); } Защищенный void Doget (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {response.setContentType ("text/plain; charset = utf-8"); response.setcharacterencoding ("UTF-8"); response.setheader ("location", "cilina.txt"); response.setheader ("Distosition", "Attactment; filename =" + "account.txt"); OutputStream outputStream = response.getOutputStream (); InputStream inputStream = new FileInputStream ("e:/loads"+"/account.txt"); Byte [] buffer = новый байт [1024]; int i = -1; while ((i = inputstream.read (buffer))! = -1) {outputstream.write (буфер, 0, i); } outputstream.flush (); outputStream.close (); } Защищенный void Dopost (httpservletRequest, httpservletresponse response) throws servletexception, ioexception {Doget (запрос, ответ); }}(Второй метод загрузки)
Создайте новую страницу JSP и выберите скачать
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"-// w3c // dtd html 4.01 // en "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> </title> </head> <body> <a a href = "../ dodownloadservlet? Filename = hehehehe.txt"> Нажмите, чтобы загрузить </a> </body> </html>
Создайте класс сервлета для загрузки (Примечание: если имя файла этой загрузки является китайским, он все равно вызовет искаженную код)
пакет com.load; импорт java.io.bufferedinputstream; import java.io.file; импорт java.io.fileinputstream; импорт java.io.ioexception; импорт java.io.inputstream; import java.io.OutputStream; импорт java.net.urlencoder; import javax.servlet.sersemer; javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpserserponse; import javax.servlet.jsp.jspfactory; javax.servlet.jsp.pagecontext; import org.hsqldb.lib.stringutil; import com.jspsmart.upload.smartupload; импорт com.jspsmart.upload.smartuploadexception; @webservelt ("/dodownloadervelcervellserv stateserv stateserv vestledservserv statervled stateserv stateserv htservled Long SerialVersionUid = 1L; public dodownloadservlet () {super (); } Защищенный void Doget (httpservletRequest, httpservletresponse response) Throws ServletException, ioException {// Получить имя загруженного файла // String Filename = request.getParameter ("filename"); // string fileName = new String (fileName.getBytes ("iso8859-1"), "UTF-8"); // Создать новый объект Smartupload SmartUpload su = new SmartUpload (); Pagecontext pagecontext = jspfactory.getDefaultFactory (). GetPageContext (это, запрос, ответ, null, true, 8192, true); // загружать инициализацию su.initialize (pagecontext); // установить запретное открытие файла su.setContentDisposition (null); // Скачать файл try {su.downloadfile ("/alinger/"+filename); } catch (SmartUploAdexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} защищенный void Dopost (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {Doget (запрос, ответ); }}(Третий метод загрузки)
Тот же код страницы JSP, что и выше, здесь не будет повторен.
Создайте новый класс Serlvet для реализации функции загрузки (примечание: даже если имя файла является китайским именем, не будет искаженных проблем!)
пакет com.load; импорт java.io.bufferedinputstream; import java.io.file; импорт java.io.fileinputstream; импорт java.io.ioexception; импорт java.io.inputstream; import java.io.OutputStream; импорт java.net.urlencoder; import javax.servlet.sersemer; javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpserserponse; import javax.servlet.jsp.jspfactory; javax.servlet.jsp.pagecontext; import org.hsqldb.lib.stringutil; import com.jspsmart.upload.smartupload; импорт com.jspsmart.upload.smartuploadexception; @webservelt ("/dodownloadervelcervellserv stateserv stateserv vestledservserv statervled stateserv stateserv htservled Long SerialVersionUid = 1L; public dodownloadservlet () {super (); } Защищенный void Doget (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {// Получить имя файла String path1 = request.getParameter ("filename"); // Получить имя пути String PATH = request.getSession (). GetServletContext (). GetRealPath ("/sluster/"+path1); // PATE - это сплайсированный файл на основе пути журнала и имени файла. String fileName = file.getName (); попробуйте {// судить, является ли это IE11 Boolean Flag = request.getheader ("user-agent"). indexof ("like gecko")> 0; // IE11 Строка пользователя-агента: Mozilla/5.0 (Windows NT 6.1; WOW64; TRIDET/7.0; RV: 11.0), как Gecko // IE6 ~ IE10 версия Пользователь-Агент. (request.getheader ("user-agent"). tolowercase (). indexof ("msie")> 0 || flag) {filename = urlencoder.encode (имя файла, "UTF-8"); // IE Browser} else {// Сначала удалите пробелы в имени файла, а затем конвертируйте форма для оборождения в utf-8, чтобы не было вблизи, чтобы не было вблизи, чтобы не соответствовать коду. // Это имя файла используется для имени файла, автоматически отображаемого в поле для загрузки браузера = new String (fileName.replaceall ("", "") .getBytes ("UTF-8"), "isO8859-1"); // Firefox Browser // Firefox Browser Пользовательская строка: //mozilla/5.0 (Windows NT 6.1; WOW64; RV: 36.0) Gecko/20100101 Firefox/36.0} InputStream FIS = New BufferedInputStream (New FileInptream (PATH)); байт [] буфер; buffer = new Byte [fis.Avialable ()]; fis.read (buffer); fis.close (); response.reset (); response.addheader («Содержание-распределение», «Приложение; файл имя =" +файл); response.addheader ("content-juins", "" + file.length ()); OutputStream OS = response.getOutputStream (); response.setContentType («Приложение/октет-поток»); OS.Write (Buffer); // Выходной файл os.flush (); os.close (); } catch (ioException e) {e.printstackTrace (); } System.out.println (имя файла); } Защищенный void Dopost (httpservletRequest, httpservletresponse response) throws servletexception, ioexception {Doget (запрос, ответ); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.