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>
JSP 前端页面
技术图片
  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 }
Servlet 后台处理页面

|--运行结果

//说明:路径出现的位置就是网页发布的路径

技术图片

 

 //说明:路径出现的位置就是网页发布的路径

技术图片

 

以上是关于Java jsp servlet 实现文件上传 最简单操作的主要内容,如果未能解决你的问题,请参考以下文章

servlet+jsp实现的文件上传与下载

servlet实现文件的上传与下载

Java中的文件上传(原始Servlet实现)

java如何实现文件上传和下载的功能

jsp使用servlet实现文件上传

java的纯JDBC能实现上传下载吗?怎么实现?