具体代码如下所示
*** web.xml *** <? xml versão = "1.0" coding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-innstance" xmlns = "htp:/java.snstance" xmlns = "htp:/java.snstance" xmlns = "htp:/java.snStance" xmlns = "htp://java.snStance" xmlns = "htp://java.snStance" xmlns = "htp://java.snStance" xmlns = "htp://java.snStance" xmlns = "htp://java. 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 "versão =" 2.5 "> <ervlet> <Servlet-name> fileupload </name> <ervlet-class> cn.com.action.fileUpload <Verlet-name> fileUpload </vlect-name> <url-tattern>/fileUpload </url-tattern> </servlet-mapping> </web-app>
pacote cn.com.action; importar java.io.file; importar java.io. javax.servlet.http.httpServletResponse; importar org.apache.commons.fileupload.fileitem; importar org.apache.commons.fileupload.fileuploadexception; import org.apache.commons.fileUpload.disk.disk.disk.disk.disk.disk.disk.disk.disk.disksisk; org.apache.commons.fileupload.servlet.ServletFileUpload;/** * * @author Administrator * 文件上传 * 具体步骤: * 1)获得磁盘文件条目工厂 DiskFileItemFactory 要导包 * 2) 利用 request 获取 真实路径 ,供临时文件存储,和 最终文件存储 ,这两个存储位置可不同,也可相同 * 3)对 DiskFileItemFactory 对象设置一些 属性 * 4) 高水平的 API 文件上传处理 ServletFileUpload upload = new ServletFileUpload (fábrica); * 目的是调用 Parsequest (Solicitação) 方法 获得 FileItem 集合 Lista , * * 5) 在 FileItem 对象中 , 遍历 , , 判断 是否是 普通文本信息 另做处理 * 6) * 第一种. 用第三方 提供的 item.Write (novo arquivo (caminho, nome do arquivo)); 直接写到磁盘上 * 第二种. 手动处理 * */classe pública FileUpload estende HttpServlet {public void Doget (solicitação httpServletRequest, resposta httpServletResponse) lança servletexception, ioexception {request.setcharacterencoding ("utf-8"); // 设置编码 // 获得磁盘文件条目工厂 DiskFileItemFactory Factory = new DiskFileItemFactory (); // 获取文件需要上传到的路径 String path = request.getRealPath ("/upload1"); // string path = "c:/upload1"; // 如果没以下两行设置的话 , 上传大的 文件 会占用 , , // 设置暂时存放的 存储室, 这个存储室 , 可以和 最终存储文件 的目录不同/** ** 原理 它是先存到 , , 然后在真正写到 , , * 按理来说 当上传一个文件时 , 其实是上传了两份 , 第一个是以 .tem 格式的 * 然后再将其真正写到 */fábrica.SetRepository (novo arquivo (caminho); // 设置 缓存的大小 , 当上传文件的容量超过该缓存时 , 直接放到 暂时存储室 fábrica. // 高水平的 API 文件上传处理 servletfileUpload upload = new ServletFileUpload (fábrica); tente {// 可以上传多个文件 list <FileItem> list = (list <FileItem>) upload.parserequest (request); para (item de fileItem: list) {// 获取表单的属性名字 string name = item.getfieldName (); // 如果获取的 表单信息是普通的 文本 信息 if (item.isformfield ()) {// 获取用户具体输入的字符串 , 名字起得挺好 , 因为表单提交过来的是 字符串类型的 string value = item.getString (); request.setAtattribute (nome, valor); } else {// 对传入的非 简单的字符串进行处理 , 比如说二进制的 图片 , 电影这些/** * 以下三步 , 主要获取 上传文件的名字 */// 获取路径名 String value = item.getName (); // 索引到最后一个反斜杠 int start = value.LastIndexOf ("//"); // 截取 上传文件的 字符串名字 , 加 1 是 去掉反斜杠 , nome do arquivo de string = value.substring (start+1); request.setAttribute (nome, nome do arquivo); // 真正写到磁盘上 // 它抛出的异常 用 Exceção 捕捉 //item.write (novo arquivo (caminho, nome do arquivo)); // 第三方提供的 // 手动写的 outputStream out = new FileOutputStream (novo arquivo (caminho, nome do arquivo)); InputStream in = item.getInputStream (); int length = 0; byte [] buf = novo byte [1024]; System.out.println ("获取上传文件的总 获取上传文件的总 的容量 ::"+item.getSize ()); // in.read (buf) 每次读到的数据存放在 buf 数组中 while ((comprimento = in.read (buf))! = -1) {// 在 buf 数组中 取出数据 写到 (输出流) 磁盘上 out.write (buf, 0, comprimento); } in.close (); out.Close (); }}} catch (fileUploadexception e) {e.printStackTrace (); } catch (Exceção e) {e.printStackTrace (); } request.getRequestDispatcher ("filedemo.jsp"). Forward (solicitação, resposta); } public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {doget (solicitação, resposta); }}*** Index.jsp *** <%@ página de página = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>上传入口</title></head><body> <form action="fileUpload" ENCTYPE = "Multipart/form-Data" Method = "post"> 用户名称: <input type = "text" name = "usename"> <br/> 上传图片: <input type = "file" name = "file1"> <br/> 上传文件: <input type = "file" = "file2"> <br/> <input = " </body> </html>
*** FILEDEMO.JSP *** <%@ Page Language = "Java" import = "java.util.*" PageEncoding = "Utf-8"%> <!用户名称: $ {requestscope.usename} <r /> 图片名称: $ {requestscope.file1} <r /> 文件名称: $ {requestscope.file2} <Br /> <!-把上传的图片显示出来-> <img src = "upload1 /<%() request.总结
以上所述是小编给大家介绍的 Java 实现上传文件图片到指定服务器目录 , 希望对大家有所帮助 , 如果大家有任何疑问请给我留言 , 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!