В разработке веб -приложений функции загрузки файлов и загрузки являются очень часто используемыми функциями. Следующая статья познакомит вас с подробным объяснением примеров загрузки и загрузки файла Javaweb.
Для загрузки файлов браузер передает файл на сервер в форме потока в процессе загрузки. Это более хлопотно, если вы напрямую используете Сервлет для получения входного потока загруженного файла, а затем анализировать в нем параметры запроса. Следовательно, он обычно выбирается для использования общей загрузки, компонента загрузки файла инструмента Apache Open Source. Пакет JAR с компонентом загрузки обычной загрузки может быть загружен на официальном веб-сайте Apache. Common-FileUpload зависит от пакета Common-IO, поэтому вам также необходимо загрузить этот пакет.
1. Загрузка файла
JSP загрузка страницы
Для загрузки компонентов требуются следующие меры предосторожности
Форма формы: method = ”post” ectype = ”Multipart/Form-Data»
Принадлежит домену: input type = ”file” name = ”file” size = ”50”
Эти два момента сделаны и отображаются следующим образом
< %@ page contentType = "text/html; charset = utf-8" language = "java" %> <html> <head> <Title> test upload </teal> </head> <body> <form action = "dealwithupload.jsp" method = "post" enctype = "multipry/form-data"> <input type = "file =" ectype = "multive/form-data"> <input type = "name =" nate "" ectype = "multiport/form-data"> <input type = "name =" nactype = "neffect =" nate "". type = "Отправить" name = "propect" value = "prope"> </form> </body> </html>
Web.xml конфигурация пути загрузки
Путь загрузки также может быть записан непосредственно в коде, но конфигурация здесь удобна для ее изменения.
<context-param> <distice> местоположение для хранения загруженного файла </description> <param-name> file-upload </param-name> <param-value> e: // temp // </param-value> </context-param>
Обработка загруженного JSP
<%@ page contentype = "text/html; charset = utf-8" language = "java"%> <%@ page import = "org.apache.commons.fileupload.fileitem, org.apache.commons.filepload.disk.diskfileitemfore, org.apache.fileAd.sload.sload.sload.sload.sload.serslaud.shile %> < %@ page import = "java.io.file" %> < %@ page import = "java.util.iterator" %> < %@ page import = "java.util.list" %> < %файл файла; int maxfilesize = 5000 * 1024; int maxmemsize = 5000 * 1024; Context.getInitParameter ("file-Upload"); // Получить путь загрузки в строку файла конфигурации contentType = request.getContentType (); // Возврат типа MIME в теле запроса if (contentType.contains ("multipart/form-data")) {diskfieletemfortor Fileitemfactory.setsizeThreshold (maxmemsize); // Установить максимальный кэш factory.setRepository (new File ("E: // temp //")); // Установить временный каталог, используемый для загрузки ServletFileUpload upload = new ServletFileUpload (factory);//create file upload upload. Максимальный размер загрузки файлов, единица btry {list fileitems = upload.parserequest (request); // parse composite form data и возвращает сбор FileItems, так что несколько файлов можно загрузить одновременно итератор i = fileItems.iterator (); out.println ("<html>"); upload </title> "); out.println (" </head> "); out.println (" <body> "); // Траверсировать загруженный файл while (i.hasnext ())) {fileitem fi = (fileitem) i.next (); if (! fi.isformfield () // Если это тип upload, потому что формат. fi.getFieldName();//Return fileString fileName = fi.getName();//Return the upload file name, here you can check whether the uploaded file suffix is legal, use String's endWith() to boolean isInMemory = fi.isInMemory();//Long sizeInBytes = fi.getSize();//Return the file size//Start write to the file, the file name is Настраиваемая if (fileName.lastIndexof ("//")> = 0) {file = new File (filePath, filename.substring (filename.lastIndexof ("//")));} else {file = new File (filePath, filename.substring (fileName.lastIndexof ("//")+1); ; out.println ("загруженное имя файла:" + filepath + filename + "<br>");}} out.println ("</body>"); out.println ("</html>");} catch (исключение Ex) {System.out.println (ex);}} else {out.println ("<html>"); out.println ("<head>"); out.println ("<tite> verlet upload </title>"); out.println ("</head>"); Загружено </p> "); out.println (" </body> "); out.println (" </html> ");}%>2. Скачать файл
Ссылка на загрузку файла на блог Гушана Кангланг, который был подробно написан и использовался напрямую.
Основная идея загрузки: сначала пройти все файлы в каталоге загрузки, а затем отображать их на странице, клиент делает запрос на загрузку, а сервер отвечает на загрузку.
Перечислите все файлы в каталоге загрузки:
Общедоступный класс ListFileservlet Extens Httpservlet {public void Doget (httpservletrequest, httpservletresponse response) Throws servletexception, ioexception {// Получить каталог для загрузки файла string uploadflepath = this.getservletcontext (). Map <string, string> filenamemap = new Hashmap <string, string> (); // рекурсивно пройти все файлы и каталоги в каталоге FilePath, и сохраните имя файла в файле в списке списков карт (новый файл (uploadfilePath), FilenAmemap); // может представлять файл или файл // Отправить коллекцию Maptfate. request.setattribute ("filenamemap", filenamemap); request.getRequestDispatcher ("/listfile.jsp"). ListFile (файл файла, карта <string, string> map) {// Если файл представляет не файл, а в каталоге if (! file.isfile ()) {// Перечислите все файлы и каталоги в этом файле файла каталога [] = file.listfiles (); // transtraverse files [] Array для (File f: file) {// Recurive ListFile (f, f, map); Загруженный файл переименован в форме имени uuid_file. Удалите uuid_part из имени файла file.getName (). Indexof ("_"), чтобы получить местоположение символа "_" в строке. Если имя файла аналогично: 9349249849-88343-8344_a_fan_davi.avi, то File.getName (). Substring (file.getName (). Indexof ("_")+1) может получить a_fan_davi.avi part*/string reallaname =+1). file.getName (). substring (file.getName (). indexof ("_")+1); // file.getName () Получает исходное имя файла. Это имя уникально, поэтому его можно использовать в качестве ключа. RealName - это обработанное имя. Это может быть повторено map.put (file.getName (), realName);}} public void dopost (httpservlectrequest, httpservletresponse response) Throws ServletException, ioException {Doget (запрос, ответ);}}Здесь я кратко рассказываю о методе списки в списке Fileservlet. Метод списков используется для перечисления всех файлов в каталоге. Метод списка использует рекурсию. В реальной разработке мы обязательно создадим таблицу в базе данных, в которой хранится загруженное имя файла и конкретный каталог хранилища файла. Мы можем знать конкретный каталог хранилища файла, запрашивая таблицу, и нет необходимости использовать рекурсионные операции. Этот пример заключается в том, что база данных не хранит загруженное имя файла и конкретное местоположение хранилища файла, а место для хранения загруженного файла используется для разрушения хранилища, поэтому необходима рекурсия. Во время рекурсии полученное имя файла хранится в коллекции карт, передаваемой извне в метод списка, поэтому мы можем убедиться, что все файлы хранятся в одной и той же коллекции карт.
Настройка ListFileserVlet в файле web.xml
<Servlet> <servlet-name> listFileservlet </servlet-name> <vervlet-class> me.gacl.web.controller.listfileservlet </servlet> </servlet> <servlet-mapping> <servlet-name> listfileservlet </servlet-name> <url-pattern>/servlet/listfileservererveler </servlet>
Страница listfile.jsp, отображающая загруженный файл, следующая:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> <! Doctpe html> <html> <head> Page </title> </head> <body> <!-Коллекция карты Traverse-> <C: foreach var = "me" eption = "$ {filenamemap}"> <C: url value = "/servlet/downloadservlet" var = "downuRl"> <c: param name = "filename" value = "$ {me.key}"> </c: param> </c: url> $ {me.value} <a href = "$ {downUrl}"> Скачать </a> <br/> </c: foreach> </body> </html>Реализовать загрузку файла
Пакет me.gacl.web.controller; import java.io.file; import java.io.fileinputstream; импорт java.io.ioexception; импорт java.io.outputstream; импорт java.net.urlencoder; импорт javax.servlet.servlet.servletexception. javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; public class downloadservlet exters httpservlet {public void Doget (httpservletrequest, httpservonse response) vorwesexception us usmememe usemememememe usemeame useame usememe useame restaum = request.getParameter ("filename"); //23239283-92489-avatar.avifilename = new String (filename.getbytes ("iso8859-1"), "UTF-8"); // Загруженные файлы сохраняются в поддачеректоре строки/web-inf/загрузки. filesaverootpath = this.getServletContext (). getRealPath ("/web-inf/upload"); // Узнайте каталог, в котором файл расположен по имени файла String path = findFilesavePathbyFilename (файл файл, файл файл averootpath); // Получение файла файла. if (! file.exists ()) {request.setattribute ("Сообщение", "Ресурс, который вы хотите загрузить, был удален !!"); request.getRequestDispatcher ("/message.jsp"). Worth (recept, response); return;} // Имя файла обработки realName = fileName.subString (filenAM Браузер для загрузки файла response.setheader ("content-disposition", "Attachment; filename =" + urlencoder.encode (realName, "UTF-8")); // Прочитайте файл для загрузки и сохранения его в FileInptream FileInptream FileInptream = new FileInptream (PATH + "//" + FILENAME); response.getOutputStream (); // Создать буферный буфер буферного байтового буфера [] = новый байт [1024]; int len = 0; // Циль in.close (); // Закрыть выходной stream out.close ();}/*** @method: findfilesavepathbyfilename* @description: Найдите путь файла, который будет загружен с помощью имени файла и корневого каталога хранилища* @param filename filenam из файла, который будет загружен*/ public String findFilesavePathbyFilename (String FileName, String saverootpath) {int hashcode = filename.hashcode (); int dir1 = hashcode & 0xf; // 0--15int dir2 = (hashcode & 0xf0) >> 4; // 0-15String dir = saverootpath + "//" + dir1 + "//" + dir2; // upload/2/3 upload/3/5file file = new File (dir); if (! file.exists ()) {// Создать файл каталога.mkdirs ();} return dir;} public void dopost (httpservletrequest, httpservestresponsНастройка DownloadServlet в файле web.xml
<Servlet> <servlet-name> downloadServlet </servlet-name> <vervlet-class> me.gacl.web.controller.downloadservlet </servlet> </servlet> <servlet-mapping> <servlet-name> downervelclet </servlet-name> <url-pattern>/servlet/downloarserverserverser </url-pattern-mapping>
Выше приведено соответствующие знания о загрузке и загрузке файлов javaweb, представленных вам редактором. Я надеюсь, что это будет полезно для вас.