Java jsp servlet 实现文件上传 最简单操作
Posted twuxian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java jsp servlet 实现文件上传 最简单操作相关的知识,希望对你有一定的参考价值。
|--实现文件上传的方式
1、进入http://commons.apache.org/proper/commons-fileupload/using.html
2、点击用户指南
3、对着用户指南一步步复制粘贴,并把代码撸成自己想要的样子
补充:记得要将commons-io-2.4.jar和commons-fileupload-1.2.2.jar这两个包放到编译器里面
|--现成的代码
1 <%-- 2 Created by IntelliJ IDEA. 3 User: Administrator 4 Date: 2019/10/8 5 Time: 16:14 6 To change this template use File | Settings | File Templates. 7 --%> 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 9 <html> 10 <head> 11 <title>作业三第1遍</title> 12 </head> 13 <body> 14 文件上传注意事项:<br> 15 <ol> 16 <li>提交方式必须是post</li> 17 <li>enctype="multipart/form-data"是以字节数据的形式提交表单,否则默认是kv形式,只会提交文件名</li> 18 <li>如果以默认的application/x-www-form-urlencode的方式提交,上传的就不是文件本身</li> 19 </ol> 20 <%--application/x-www-form-urlencoded 以键值对的方式上传 --%> 21 <%-- multipart/form-data 以二进制的方式上传 --%> 22 <form action="/work/UploadServlet" method="post" enctype="multipart/form-data"> 23 <input type="text" name="data1" value="data1Value"> 24 <hr> 25 <input type="text" name="data2" value="data2Value"> 26 <hr> 27 <input type="file" name="dataFile"> 28 <hr> 29 <input type="submit" value="上传该表单"> 30 <hr> 31 </form> 32 33 34 </body> 35 </html>
1 package com.bd25; 2 3 import org.apache.commons.fileupload.FileItem; 4 import org.apache.commons.fileupload.FileItemFactory; 5 import org.apache.commons.fileupload.FileUploadException; 6 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 7 import org.apache.commons.fileupload.servlet.ServletFileUpload; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.ServletInputStream; 11 import javax.servlet.annotation.WebServlet; 12 import javax.servlet.http.HttpServlet; 13 import javax.servlet.http.HttpServletRequest; 14 import javax.servlet.http.HttpServletResponse; 15 import java.io.File; 16 import java.io.IOException; 17 import java.io.UnsupportedEncodingException; 18 import java.util.Enumeration; 19 import java.util.Iterator; 20 import java.util.List; 21 22 @WebServlet(name = "UploadServlet", urlPatterns = "/UploadServlet") 23 public class UploadServlet extends HttpServlet { 24 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 25 //处理中文乱码--已经测试这个要不要无所谓 26 request.setCharacterEncoding("UTF-8"); 27 28 //判断是不是传入的一个二进制的流 29 boolean isMultipart = ServletFileUpload.isMultipartContent(request); 30 //创建一个简单工厂实例 31 FileItemFactory factory = new DiskFileItemFactory(); 32 //创建一个新的文件上传处理程序 33 ServletFileUpload upload = new ServletFileUpload(factory); 34 //解析request 35 try { 36 List<FileItem> fileItems = upload.parseRequest(request); 37 //处理上传的项目 38 Iterator iter=fileItems.iterator(); 39 while(iter.hasNext()){ 40 FileItem item = (FileItem) iter.next(); 41 if (item.isFormField()){ 42 //普通域 43 processFormField(item); 44 }else{ 45 //文件域 此处注意processUploadFile()方法的参数里面传入request的目的是让下面写文件的时候获取根目录用的 46 processUploadFile(item,request); 47 } 48 49 } 50 51 } catch (FileUploadException e) { 52 e.printStackTrace(); 53 } 54 55 56 ServletInputStream inputStream = request.getInputStream(); 57 byte[] bs=new byte[1024]; 58 int total=-1; 59 while ((total=inputStream.read(bs))!=-1){ 60 System.out.print(new String(bs,0,total)); 61 } 62 } 63 64 /** 65 * 文件域 66 * @param item 67 * @param request 68 */ 69 private void processUploadFile(FileItem item, HttpServletRequest request) { 70 //获取文件相关信息 71 String fileName=""; 72 if (!item.isFormField()) { 73 String fieldName = item.getFieldName(); 74 fileName = item.getName(); 75 String contentType = item.getContentType(); 76 boolean isInMemory = item.isInMemory(); 77 long sizeInBytes = item.getSize(); 78 System.out.println("文件名: "+fileName+" 文件属性:"+fieldName+" 文件大小:"+sizeInBytes+" 文件类型:"+contentType); 79 } 80 //以下是转存操作,找到储存文件的根路径 81 String fileRootPath=request.getServletContext().getRealPath("/WEB-INF/upload"); 82 File dir = new File(fileRootPath); 83 if (!dir.exists()){ 84 dir.mkdirs(); 85 } 86 //写文件 87 File file = new File(fileRootPath+"/"+fileName); 88 try { 89 item.write(file); 90 } catch (Exception e) { 91 e.printStackTrace(); 92 } 93 } 94 95 /** 96 * 普通域 97 * @param item 98 */ 99 private void processFormField(FileItem item) { 100 String key = item.getFieldName(); 101 String value = null; 102 try { 103 //处理中文乱码 104 value = item.getString("UTF-8"); 105 } catch (UnsupportedEncodingException e) { 106 e.printStackTrace(); 107 } 108 System.out.println(key+"----"+value); 109 } 110 111 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 112 113 } 114 115 @Override 116 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 117 super.service(req, resp); 118 System.out.println("刷新...."); 119 } 120 121 @Override 122 public void init() throws ServletException { 123 super.init(); 124 System.out.println("初始化...."); 125 } 126 }
|--运行结果
//说明:路径出现的位置就是网页发布的路径
//说明:路径出现的位置就是网页发布的路径
以上是关于Java jsp servlet 实现文件上传 最简单操作的主要内容,如果未能解决你的问题,请参考以下文章