:
*** web.xml *** <? xml version = "1.0" Encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/ns/javae" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd "id =" webApp_id "version =" 2.5 "> <Servlet> <Servlet-Name> FileUpload </ servlet-Name> </ servlet> CN.com.action.fileupload </Servlet-Class> <Vertlet-Name> FileUpload </ servlet-name> <URL-Pattern> / Fileupload </url-potern> </ servlet-mapping> </ web-apprent>
package cn.com.action; import java.io.file; import java.io. *; import java.io.ioexception; import java.util.list; import javax.servlet.servletException; import javax.servlet.http.httpleservlet; import javax.servlet.http.http. javax.servlet.http.httpservletResponse; import org.apache.commons.fileupload.fileitem; import org.apache.commons.fileupload.disk.diskfileitemfactory; org.apache.commons.fileupload.servlet.servletFileupload; / ** * * @Author Administrator * 文件上传 * 具体步骤 : : * 1) 获得磁盘文件条目工厂 获得磁盘文件条目工厂 diskfileitemfactory 要导包 * 2) 利用 利用 获取 真实路径 , 供临时文件存储 , 和 最终文件存储 , 这两个存储位置可不同 , 也可相同 * 3)) 对 对 供临时文件存储 , 和 , , 这两个存储位置可不同 也可相同 也可相同 * 3)) 对4) 高水平的 API 文件上传处理 ServletFileUpload upload = new ServletFileUpload (Factory); * 目的是调用 Parerequest (Demande) 方法 获得 FileItem 集合 Liste , * * 5) 在 FileItem 对象中 获取信息 , 遍历 , 判断 表单提交过来的信息 是否是 普通文本信息 另做处理 * 6) * 第一种. 用第三方 提供的 item.write (nouveau fichier (chemin, nom de fichier)); 直接写到磁盘上 * 第二种. 手动处理 * * / public class Fileupload étend httpServlet {public void doGet (httpsservletRequest request, httpservletResponse réponse) lève ServletException, ioException {request.SetcharAtterencoding ("utf-8"); // 设置编码 // 获得磁盘文件条目工厂 DiskFileItemFactory Factory = new DiskFileItemFactory (); // 获取文件需要上传到的路径 String path = request.getRealPath ("/ upload1"); // String path = "c: / upload1"; // 如果没以下两行设置的话 , 上传大的 文件 会占用 很多内存 , // 设置暂时存放的 存储室, 这个存储室 , 可以和 最终存储文件 的目录不同 / ** * 原理 它是先存到 暂时存储室 , 然后在真正写到 对应目录的硬盘上 , * 按理来说 当上传一个文件时 , 其实是上传了两份 其实是上传了两份 , 第一个是以 .tem 格式的 * 然后再将其真正写到 对应目录的硬盘上 * / factory.SetRepository (nouveau fichier)); // 设置 缓存的大小 , 当上传文件的容量超过该缓存时 , 直接放到 暂时存储室 Factory.SetSizethReshold (1024 * 1024); // 高水平的 API 文件上传处理 ServletFileUpload upload = new ServletFileUpload (Factory); essayez {// 可以上传多个文件 list <FequeItem> list = (list <FeleItem>) upload.parseRequest (request); pour (FileItem Item: list) {// 获取表单的属性名字 String name = item.getFieldName (); // 如果获取的 表单信息是普通的 文本 信息 if (item.isformField ()) {// 获取用户具体输入的字符串 , 名字起得挺好 , 因为表单提交过来的是 字符串类型的 字符串类型的 字符串类型的 字符串类型的 字符串类型的 字符串类型的 String value = item.getString (); request.setAttribute (nom, valeur); } else {// 对传入的非 简单的字符串进行处理 , 比如说二进制的 图片 , 电影这些 / ** * 以下三步 , 主要获取 上传文件的名字 * / // 获取路径名 String Value = item.getName (); // 索引到最后一个反斜杠 int start = value.lastIndexof ("//"); // 截取 上传文件的 字符串名字 , 加 1 是 去掉反斜杠 , , String filename = value.substring (start + 1); request.setAttribute (nom, nom de fichier); // 真正写到磁盘上 // 它抛出的异常 用 exception 捕捉 //item.write (nouveau fichier (chemin, nom de fichier)); // 第三方提供的 // 手动写的 outputStream out = new FileOutputStream (nouveau fichier (path, nom de fichier)); InputStream dans = item.getInputStream (); int length = 0; octet [] buf = nouveau octet [1024]; System.out.println ("获取上传文件的总 获取上传文件的总 的容量 :" + item.getSize ()); // in.read (buf) 每次读到的数据存放在 buf 数组中 while ((longueur = in.read (buf))! = -1) {// 在 buf 数组中 取出数据 写到 (输出流) 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上 磁盘上wer. } in.close (); out.close (); }}} catch (fileUpLaDaDException e) {e.printStackTrace (); } catch (exception e) {e.printStackTrace (); } request.getRequestDispatcher ("fileDemo.jsp"). Forward (demande, réponse); } public void doPost (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {doget (request, réponse); }}*** index.jsp *** <% @ page linguisse = "java" contentType = "text / html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html public "- // w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" contenu-type "contenu =" Text / html; charset = utf-8 "> <Title> 上传入口 </ title> </ head> <pody> <formulaire d'action =" Fileupload " ENCTYPE = "Multipart / Form-data" Method = "Post"> 用户名称: <Input Type = "Text" name = "USENAME"> <br/> 上传图片: <input type = "file" name = "file1"> <br/> 上传文件: <input type = "file" name = "File2"> <br/> <entrée type = "soumission" value = "提交 提交 提交 提交 提交" /> </ form> </ body>
*** fileDemo.jsp *** <% @ page Language = "Java" import = "java.util. *" Pageencoding = "utf-8"%> <! Doctype html public "- // w3c // dtd html 4.01 transitional // en"> <html> <ead> <titre> 上传文件图片案列 </ title>用户名称: $ {requestscope.useName} <br /> 图片名称: $ {requestscope.file1} <r /> 文件名称: $ {requestCcope.file2} <br /> <! - 把上传的图片显示出来 -> <img src = "upload1 / <% = (string) request.getAttribute (" file1 ")%>" /> </ body> </ html>总结
以上所述是小编给大家介绍的 Java 实现上传文件图片到指定服务器目录 , 希望对大家有所帮助 , 如果大家有任何疑问请给我留言 , 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!