Примеры в этой статье делятся с вами технологией загрузки файла Java для вашей ссылки. Конкретный контент заключается в следующем
Форма:
Клиент должен использовать тип данных Multipart/Form Data, чтобы представлять тип составных данных при отправке HTTP. Прямо сейчас:
Используйте теги HTML в форме.
Требуется пакет:
Commons-fileUpload.jar, инструмент файла загрузки Core находится в этом пакете.
пакет Commons-io.jar, необходимый для загрузки файлов
Подробное объяснение загрузки класса файлов:
DiskFileItemFactory - Создайте каталог файлов мониторинга времени, который относится к размеру области кэша
ServletFileUpload используется для анализа httpservletrequest. Возвращает набор файловых объектов.
FileItem представляет каждый объект файла, загруженный пользователем.
<%@ page language = "java" import = "java.util.*" pageencoding = "UTF-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <голова> <Tite> «REDUCTIOD DEMO </TITE> </HEAD> <FOD> <F CORDE> <FONT> <FONT> <FONT> <FONT> <F COBUST> <FONT> <F COBUS> <FONT> <FONT> <F COOD> board--understand the underlying layer</font> <!-- multipart/form-data: Multipart (not only files, but also parts) --> <form action="<%=request.getContextPath()%>/upload0" method="post" enctype="multipart/form-data"> File:<input type="file" name="file"/> <input type="submit" value="upload"/> <!-- Загруженное имя файла не может быть на китайском языке, в противном случае полученное имя файла искажено, но следующий пример может решить эту проблему-> </form> <br/> <font color = "red" size = "6"> Использовать инструмент загрузки файла Apache для достижения загрузки файла </font> <!-Application/x-Www-form-urlended-> <form action action = "<%= retque.getclodcloadcloadcloadcloadclodeptat. method = "post" ectype = "multipart/form-data"> файл: <input type = "file" name = "file"/> <input type = "Отправить" value = "upload"/> </form> <font color = "red" size = "6"> Используйте инструмент загрузки файла Apache, чтобы достичь файла загрузки 2 (решает имя файла) </font> <peach. ectype = application/xwww-form-urlencoded (значение по умолчанию) </p> <p> post2 (форма файла upload): ectype = multipart/form-data: multipart (не только файлы, но также и части) </p> <form action = "<%= request.getContextPath ()%>/optult2" method = "post" ecttype = "multe.gretcontextpath ()%>/upload2" type = "file" name = "file"/> <!-post2 (форма файла загрузки)-> <br/> Описание файла: <input type = "text" name = "desc"/> <!-post1 (нормальная форма)-> <br/> файл 2: <input type = "file" name = "file"/> <br/> Файл Описание 2: <input = "name =" desc "/> <br/> nam (> нормальный файл). 2: <input type = "file" name = "file"/> <br/> Описание файла 2: <input type = "text" name = "desc"/> <input type = "Отправить" value = "upload"/> </form> <font color = "red" size = "6"> Использовать инструмент загрузки файла Apache, чтобы достичь загрузки файла 3 (file defroddown) </font> <! Форма): ectype = application/xwww-form-urlencoded (значение по умолчанию)-> <!-post2 (форма файла загрузки): ectype = multipart/form-data: multipart (не только файлы, но также и части)-> <form action = "<%= request.getContextPath ()%>/optult3" method = "ecttype =" multe.greatpatpath ()%>/upload3 "=" post "ecttype =" quest.getContextPath ()%>/upload3 " type = "файл" name = "file"/> <!-post2 (форма файла загрузки)-> <br/> Описание файла: <input type = "text" name = "desc"/> <!-post1 (нормальная форма)-> <br/> <br/> файл 2: <input type = "file" name = "file"/> <br/> файл. value = "upload"/> </form> </body> </html>
Понимание нижнего уровня переходной платы
Пакет cn.hncu.servlet; import java.io.bufferedReader; импорт java.io.ioexception; импорт java.io.inputStream; импорт java.io.inputStreamReader; импорт java.io.printwriter; импорт javax.servletexception; import.servlet.htt javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; открытый класс opload0servlet exters httpservlet {public void dopost (httpservletrequest, httpservonse response) throwsexcection, ioyscept in = request.getInputStream (); BufferedReader BR = новый BufferedReader (New InputStreamReader (IN)); Строка; while ((line = br.readline ())! = null) {System.out.println (line); }}}Используйте инструмент загрузки файлов Apache для реализации загрузки файлов
Пакет cn.hncu.servlet; import java.io.file; import java.io.ioexception; импорт java.io.printwriter; import java.util.list; import java.util.uuid; import javax.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;import org.apache.commons.io.FileUtils;public class UploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse Ответ) бросает ServletException, ioException {response.setContentType ("text/html"); Printwriter Out = response.getWriter (); out.println ("<! Doctype html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<head> <Title> a Servlet </title> </head>"); out.println ("<body>"); out.print ("не поддерживает загрузку ... ..."); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } public void Dopost (httpservletRequest, httpservletresponse response) Throws ServletException, ioException {// на сервере укажите каталог для всех загруженных файлов path string = getservletcontext (). getRealpath ("/upload"); System.out.println ("path:"+path); Файл dir = new File (path); if (! dir.exists ()) {dir.mkdirs (); } // Создать фабрику на основе жесткого диска // diskfileitemfactory disk = new DiskFileItemFactory (); // Установить временный каталог (рекомендуется разработать временный каталог, в противном случае будет использоваться временный каталог системы.) //Disk.setrepository(New file ("d:/a")); // 3. Установите размер буфера для написания данных на жесткий диск. // Когда файл будет больше, чем этот настройка, временный файл будет сформирован во временном каталоге // Установить временный размер буфера файла-буфера 8K, временный адрес файла diskfileitemfactory f = new DiskFileItemFactory (1024*8, новый файл ("d:/a")); // загрузка инструмента-создайте объект для анализа ServletFileUpload upload = new ServletFileUpload (F); upload.setFileSizeMax (1024*1024*5); // Установите максимальный загруженный отдельный файл на 5 м // Установите максимальный размер загруженного файла. Если это несколько файлов, это сумма нескольких файлов до 8 м opload.setsizemax (1024*1024*8); // Установите сумму всех загруженных размеров файлов до 8 м // Использовать инструмент анализа для анализа Try {list <FieleItem> list = upload.parserequest (request); for (fileitem fi: list) {system.out.println ("Тип содержимого файла:"+fi.getContentType ()); // Тип содержимого файла: text/plain system.out.println ("Имя файла:"+fi.getname ()); // Имя файла: c:/adl1/desktop/a.txt string (); // file: c:/adl1/desktop/a.txt (); ext = fi.getName (). substring (fi.getName (). LastIndexof (".")); //. txt string uuid = uuid.randomuuid (). String fileName = uuid+ext; // fileutils.copyInputStreamToFile (fi.getInputStream (), New File ("d: /a/d/a.txt")); // write it Dead // fi.getInputStream () - это реальная информация fileutils.copyinputStreamtofile (fi.getinprem (), new File (path+"/"+filename)); // написать его живым}} catch (fileuploadexception e) {e.printstacktrace (); }}} Хранить загруженные файлы в этом месте
Загрузить информацию:
Загрузить результаты:
Используйте инструмент загрузки файлов Apache для достижения загрузки 2 файла (решить имя искаженного файла)
Пакет cn.hncu.servlet; import java.io.file; import java.io.ioexception; импорт java.io.printwriter; import java.util.list; import java.util.uuid; import javax.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;import org.apache.commons.io.FileUtils;public class Upload2Servlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse Ответ) бросает ServletException, ioException {response.setContentType ("text/html"); // Если это форма, содержащая загруженные файлы (post2), драма может установить только кодирование в имени файла загруженного файла (решить его китайский искаженный код) //, но она не может решить китайский искаженный код обычных компонентов формы в Post2 PrintWriter out = recsion.getWriter (); out.println ("<! Doctype html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<head> <Title> a Servlet </title> </head>"); out.println ("<body>"); out.print ("не поддерживает загрузку ... ..."); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } public void Dopost (httpservletrequest, httpservletresponse response) Throws ServletException, ioException {// Шаг 1 // Обычная форма формы (после 1), следующее предложение может установить кодирование содержимого компонента обычной формы (может решить задачу на китайскую искатель). // Если это форма, содержащая загруженные файлы (post2), это предложение может установить только кодирование в имени файла загруженного файла (решите его китайский искаженный код). Но он не может решить искаженную код компонента обычной формы (не может установить кодирование) // на сервере, указать каталог для всех загруженных файлов string path = getservletcontext (). GetRealpath ("/upload"); System.out.println ("path:"+path); Файл dir = new File (path); if (! dir.exists ()) {dir.mkdirs (); } // Установите временный размер буфера файла-буфера 8K, временный адрес файла DiskFileItemFactory f = new DiskFileItemFactory (1024*8, новый файл ("d:/a")); // загрузить инструмент ServletFileUpload upload = new ServletFileUpload (F); upload.setFileSizeMax (1024*1024*5); // Установите максимальный загруженный отдельный файл на 5м upload.setsizemax (1024*1024*8); // Установите сумму всех загруженных размеров файлов на 8m // Используйте инструмент анализа, чтобы анализировать try {list <fieTiTem> list = upload.parserequest (request); for (fileitem fi: list) {if ((fi.isformfield ())) {// Если это обычная форма формы: флажок, радио, пароль ... // string desc = fi.getString (); System.out.println ("fi.getString ():"+fi.getString ()); // вторая ступенчатая строка desc = fi.getString ("UTF-8"); // Это предложение устанавливает кодирование контента в компонентной системе обычной формы. } else {string ext = fi.getName (). substring (fi.getName (). LastIndexof (".")); //. txt string uuid = uuid.randomuuid (). toString (). replication ("-", ""); String fileName = uuid+ext; //fi.getInputStream () - это реальная информация файла fileutils.copyInputStreamTofile (fi.getInputStream (), новый файл (path+"/"+fileName)); // написать его живым}}} catch (fileuploadexception e) {e.printStackTrace ();); }}}Загрузить информацию:
Загрузить результаты:
Используйте инструмент загрузки файлов Apache для достижения загрузки файла 3 (разбивка файла)
Оптимизируйте хранилище файлов с помощью каталога хэша:
Хэш -каталог - это метод оптимизации производительности хранилища файлов. Будь то Windows или Linux, будь то NTFS или EXT3, количество предметов, которые могут быть размещены в каждом каталоге, ограничено.
Дело не в том, что его нельзя сохранить, но когда количество проектов слишком велика, скорость индексации файлов будет снижена.
Следовательно, необходимо взвесить, сколько файлов следует сохранить в каталоге. Экономия слишком много повлияет на производительность, в то время как слишком мало экономии вызовет слишком много каталогов и отходов пространства. Поэтому при сохранении больших партий файлов,
Существует алгоритм, который может «разорвать» файлы более равномерно в разных подкаталогах, чтобы улучшить скорость индекса каждого уровня. Этот алгоритм хэш. Обычно используемый MD5, SHA1 и т. Д. Можно использовать в качестве каталога хэша. MD5 также используется в моем сеансе для получения первых и девятых цифр SessionID, которые представляют собой двухуровневый хэш-путь. То есть система распространяет все файлы сеанса по 16 × 16 = 256 подкатариям. Предполагая, что сохранение 1000 файлов в каждом каталоге Linux может достичь наилучшего соотношения производительности пространства, система в идеале может иметь 256 000 файлов сеанса, используемых одновременно.
Пакет cn.hncu.servlet; import java.io.file; import java.io.ioexception; импорт java.io.printwriter; import java.util.list; import java.util.uuid; import javax.servlet.servletexcept javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; импорт org.apache.commons.fileupload.fileitem; import org.apache.commons.fileupload.fileuadexception; импорт org.apache.fileplaid.filelud.fileulaud.fileUploadexception; org.apache.commons.fileupload.disk.diskFileItemFactory; import org.apache.commons.fileUpload.servlet.servletfileUpload; импорт org.apache.commons.io.fileutils; public class upload3servlet httpservlet jodesserververververververververververververververververververververververververververververververververververververververververververververververververververververververververververververververververververvEerf Ответ) бросает ServletException, ioException {response.setContentType ("text/html"); // Если это форма, содержащая загруженные файлы (post2), драма может установить только кодирование в имени файла загруженного файла (решить его китайский искаженный код) //, но она не может решить китайский искаженный код обычных компонентов формы в Post2 PrintWriter out = recsion.getWriter (); out.println ("<! Doctype html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<head> <Title> a Servlet </title> </head>"); out.println ("<body>"); // Получить часть после "?" номер в URL в методе GET // http: // localhost: 8080/servletdemo3/upload? name = jack & sex = мужская строка qstr = request.getquerystring (); System.out.println ("qstr:"+qstr); // qstr: name = jack & sex = male out.print ("Не поддерживать загрузку ... ..."); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } public void dopost (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {response.setContentType ("text/html; charset = utf-8"); Printwriter Out = response.getWriter (); // 1 Анти-черный: передняя часть защиты отправляется с использованием метода post1 // метод 1 /* string type = request.getContentType (); if (! type.contains ("multipart/form-data")) {out.println ("подчинение не поддерживаемой формы"); возвращаться; }*/// Метод 2 Boolean Boo = ServletFileUpload.ismultipartContent (запрос); if (! boo) {out.println ("не поддерживаемая форма формы"); возвращаться; } // Шаг 1 // Обычная форма формы (post1), следующее предложение может установить кодирование содержимого компонента обычной формы (может решить свою китайскую искаженную проблему). // Если это форма, содержащая загруженные файлы (post2), это предложение может установить только кодирование в имени файла загруженного файла (решите его китайский искаженный код). Но он не может решить искаженную код компонента обычной формы (не может установить кодирование) // на сервере, указать каталог для всех загруженных файлов string path = getservletcontext (). GetRealpath ("/upload"); System.out.println ("path:"+path); Файл dir = new File (path); if (! dir.exists ()) {dir.mkdirs (); } // Установите временный размер буфера файла-буфера 8K, временный адрес файла DiskFileItemFactory f = new DiskFileItemFactory (1024*8, новый файл ("d:/a")); // загрузить инструмент ServletFileUpload upload = new ServletFileUpload (F); upload.setFileSizeMax (1024*1024*5); // Установите максимальный загруженный отдельный файл на 5м upload.setsizemax (1024*1024*8); // Установить максимальную сумму всех загруженных размеров файлов составляет 8 млн // ▲ 4 Загрузка Прогресс Прослушивание ulload.setProgressListener (new ProgressListener () {Private Double Pre Pre = 0d; @overde // Параметр 1: Сколько байтов было загружено. {Double D = 1,0*Pbyteread/PcontentLength*100; // Использование инструмента анализа для анализа Try {list <FieleItem> list = upload.parserequest (request); for (fileitem fi: list) {if ((fi.isformfield ())) {// Если это обычная форма формы: флажок, радио, пароль ... // string desc = fi.getString (); System.out.println ("fi.getString ():"+fi.getString ()); // вторая ступенчатая строка desc = fi.getString ("UTF-8"); // Это предложение устанавливает кодирование содержимого системы компонентов нормальной формы. } else {// protect: отфильтровать пустые компоненты файла, которые не выбрали if (fi.getSize () <= 0) {продолжение; // Чтение следующего файла} System.out.println ("Тип файла:"+fi.getContenttype ()); // Тип файла файла/plain system.out.println ("file ame:"+fie. JootmaMe. C: /Users/adl1/desktop/a.txt string ext = fi.getName (). Substring (fi.getName (). String fileName = uuid+ext; // Технология разрыва файлов Technology Dir1 = integer.tohexstring (uuid.hashcode () & 0x0f); String dir2 = integer.tohexstring ((uuid.hashcode () & 0xf0) >> 4); //fi.getInputStream () - это реальная информация файла fileutils.copyinputstreamtofile (fi.getinputstream (), новый файл (path+"/"+dir1+"/"+dir2+"/"+fileename)); // написано живым}}} catch (fileuploadexception e) {e.printstacktrace (); }}}Сломать сообщение:
Нарушить результаты:
Файл 1:
Файл 2:
Продемонстрировать принцип прогресса загрузки
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.