Загрузка веб -файла использует сообщение. В отличие от форм отправки сообщения, для загрузки файлов требуется настройка атрибута Form Enctype для Multipart/Form-Data. Поскольку загруженные файлы будут относительно большими, необходимо установить этот параметр, чтобы указать, что браузер использует двоичную загрузку. Если не установлено, свойство enctype по умолчанию применяется/x-www-form-urlencoded. Использование браузера будет использовать ASCII для отправки данных на сервер, что приведет к неспособности отправить файл.
Чтобы загрузить файл, используйте домен File (<input type = 'file'/> и установите ectype формы в Multipart/Form-Data.
Страница загрузки клиента показана на рисунке:
Код заключается в следующем:
upload.html
<! Doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <title> file upload </title> <meta http-equiv = "Keywords" Content = "Content1, ключевое слово2, ключевое слово3"> meta http-equiv = "meta equiv =" meta http-equiv = "meta http-equiv =" http-equiv = "content-type" content = "text/html; charset = utf-8"> <link rel = "stylesseepte" type = "text/css" href = "css/style.css"> </head> <body> <form action = "servletservlet" method = "enctype =" muldetArt/"muldetArt/" muldetArt/"muldetArt/" muldetArt/intlectArt/"diesta/" diesta/intlectArt/"muldetArt/" muldetArt/"diesta/" diesta? align = "center"> <br/> <fieldset> <legend> файл загрузки </legend> <br/> <div class = 'line'> <div align = 'left'> ulload file 1 </div> <div align = 'left'> <input type = "file" name = "file1"> </div> </div> <div = 'div =' line '> <div align =' file1 "> </div> </div> <div = div = 'div'> 'div align =' file1" align='left'>Upload file 2</div> <div align='left'> align='left'> <input type="file" name="file2"> </div> </div> <div class='line'> <div align='left'>Upload file description 1</div> <div align='left'><input type="text" name="description1"></div> </div> <div class='line'> <div align='left'>Upload file description 2</div> <div align='left'><input type="text" name="description2"></div> </div> <div class='line'> <div align='left'>Upload file description 2</div> <div align='left'></div> <div align='left'><br/> <input type="submit" value=" Upload file"> </div> </div> </fieldset> </div> </form> </body> </html>
Код, запускаемый клиентом, очень прост, а сервер более сложный. Чтобы получить содержимое, запрос, представленный браузером, должен быть проанализирован в соответствии с форматом, указанным протоколом HTTP.
Проанализировать бинарные потоки более трудно. Многие классовые библиотеки уже завершили эту работу. Например, Smartupload и Apache Commons fileupload.smartupload - это коммерческая библиотека классов. Данные хранятся в памяти во время анализа процесса запроса, поэтому они быстрее, но переполнение памяти происходит при загрузке более крупных файлов. Apache Commons Fileupload - это бесплатная библиотека класса с открытым исходным кодом. Некоторые фреймворки, такие как Struts, интегрируют библиотеку классов Apache Commonupload для реализации загрузки файлов.
Как показано на рисунке:
Код заключается в следующем:
пакет com.helloweenvsfei.servlet; import java.io.file; импорт java.io.fileOutputStream; импорт java.io.ioexception; импорт java.io.inputStream; импорт java.io.outputstream; импорт java.io. javax.servlet.servletexception; import javax.servlet.http.httpservlet; импорт javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import orgach.commons.fileupload.diskflepresse; org.apache.commons.fileupload.fileitem; import org.apache.commons.fileupload.fileuploadexception; открытый класс uploadservlet расширяет httpservlet {private static final long serialversionuid = 7523024737218332088l; Public void Doget (httpservletRequest, httpservletresponse response) бросает ServletException, ioException {response.setcharacterencoding ("UTF-8"); response.getWriter (). println («Пожалуйста, загрузите файл в пост»); } @Suppresswarnings ("unchecked") public void dopost (httpservlectrequest, httpservletresponse response) throws servletexception, ioexception {file1 = null, file2 = null; Строка Описание1 = NULL, description2 = null; response.setcharacterencoding ("UTF-8"); 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 ("<link rel = 'styleSheet' type = 'text/css' href = '../css/style.css'>"); out.println ("<body>"); out.println ("<div align = center> <br/>"); out.println ("<fieldset style = 'width: 90%'> <Legend> file upload </legend> <br/>»); out.println ("<div class = 'line'>"); out.println ("<<div align = 'Left' class = 'LeftDiv'> загрузить журнал: </div>"); out.println ("<div Align = 'Left' class = 'rightDiv'>"); // Использование объекта DiskFileUpload для анализа запроса DiskFileUpload DiskFileUpload = new DiskFileUpload (); try {// поместить анализовый результат в список списка <FieleItem> list = diskfileUpload.parserequest (request); out.println ("трасса через все файлы ... <br/>"); // Трассировать через список все файлы в файле FileItem: List) {if (fileitem.isformfield ()) {// Если это текстовое поле if ("description1" .equals (fileitem.getfieldname ())) {// Если имя fileItem - это descript.println ("Путешествовать в description1 ... <br/>"); description1 = new String (fileitem.getString (). getBytes (), "UTF-8"); } if ("description2" .equals (fileitem.getfieldname ())) {// Если fileItem - это имя description2 out.println ("Путешествие в Description2 ... <br/>"); description2 = new String (fileitem.getString (). getBytes (), "UTF-8"); }} else {// в противном случае, для поля файла if ("file1" .equals (fileitem.getfieldname ())) {// объект файла, созданный файлом клиентского файла remotefile = new File (new String (fileitem.getName (). getBytes (), "utf-8")); out.println ("Путешествие в файл1 ... <br/>"); out.println ("Расположение клиента:" + remotefile.getabsolutepath () + "<br/>"); // Файл на стороне сервера, поместите в папку upload file1 = новый файл (this.getServletContext (). GetRealPath ("Attachment"), remotefile.getName ()); file1.getParentFile (). MkDirs (); file1.createnewfile (); // Записать файл и записать содержимое файла fileItem в файл inputstream ins = fileitem.getinputstream (); OutputStream ous = new FileOutputStream (file1); try {byte [] buffer = new Byte [1024]; int len = 0; while ((len = ins.read (buffer))> -1) ous.write (буфер, 0, len); out.println ("Сохранить файл" + file1.getabsolutepath () + "<br/>"); } наконец {ous.close (); ins.close (); }} if ("file2" .equals (fileitem.getfieldname ())) {// объект файла, созданный файлом клиента, remotefile = new File (new String (fileitem.getName (). getBytes (), "UTF-8")); out.println ("Путешествие в файл2 ... <br/>"); out.println ("Расположение клиента:" + remotefile.getabsolutepath () + "<br/>"); // Файл на стороне сервера, помещайте в папку upload file2 = new File (this.getServletContext (). GetRealPath ("Attachment"), remotefile.getName ()); file2.getParentFile (). MkDirs (); file2.createnewfile (); // Напишите файл и напишите содержимое файла FileItem в файл inputstream ins = fileitem.getinputstream (); OutputStream ous = new FileOutputStream (file2); try {byte [] buffer = new Byte [1024]; int len = 0; while ((len = ins.read (buffer))> -1) ous.write (буфер, 0, len); out.println ("Сохранить файл" + file2.getabsolutepath () + "<br/>"); } наконец {ous.close (); ins.close (); }}}} out.println ("Подбор запроса завершен"); } catch (fileuploadexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); } out.println ("</div>"); out.println ("<div align = 'Left' class = 'LeftDiv'> file1: </div>"); out.println ("<div Align = 'Left' class = 'rightDiv'>"); out.println ("<a href = '" + request.getContextPath () + "/Attachment/" + file1.getName () + "' target = _blank>" + file1.getName () + "</a>"); out.println ("</div>"); out.println ("</div>"); } if (file2! = null) {out.println ("<div class = 'line'>"); out.println ("<div align = 'Left' class = 'LeftDiv'> file2: </div>"); out.println ("<div Align = 'Left' class = 'rightDiv'>"); out.println ("<a href = '" + request.getContextPath () + "/atchetment/" + urlencoder.encode (file2.getName (), "utf-8") + "' target = _blank>" + file2.getName () + "</a>"); out.println ("</div>"); out.println ("</div>"); } out.println ("<div class = 'line'>"); out.println ("<div align = 'Left' class = 'LeftDiv'> description1: </div>"); out.println ("<div Align = 'Left' class = 'rightDiv'>"); out.println ("<div Align = 'Left' class = 'rightDiv'>"); out.println ("<div align = 'Left' class = 'LeftDiv'> description2: </div>"); out.println ("<div Align = 'Left' class = 'rightDiv'>"); out.println (description2); out.println ("</div>"); out.println ("</div>"); out.println ("</fieldset> </div>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}Эффект работы программы показан на рисунке:
Эта статья была составлена в «Краткое описание методов операции загрузки Java», и все могут учиться и прочитать.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.