美文网首页
008.Servlet3.0 多文件处理

008.Servlet3.0 多文件处理

作者: 胖先森 | 来源:发表于2017-03-21 07:43 被阅读0次

依然是没有进行封装处理和验证处理

JSP页面代码


<form action="moreFile" method="post" enctype="multipart/form-data">
    <input type="file" name="photo1">
    <input type="file" name="photo2">
    <input type="file" name="photo3">
    <button>上传</button>
</form>

Servlet代码

package com.shxt.servlet;
 
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Date;
import java.util.Random;
import java.util.UUID;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
 
/**
 * Servlet implementation class UploadServlet
 */
@WebServlet("/moreFile")
@MultipartConfig(
        fileSizeThreshold=1024*1024*2,  // 2MB  当数据量大于该值时,内容将被写入文件
        maxFileSize=1024*1024*10,       // 10MB  允许上传的文件最大值。默认值为 -1,表示没有限制
        maxRequestSize=1024*1024*50        // 50MB  针对该 multipart/form-data 请求的最大数量,默认值为 -1,表示没有限制
)   
public class UploadMoreServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
 
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                //1.获取服务器的绝对路径
                String path = request.getServletContext().getRealPath("/upload");
                //2.建立文件联系
                File folder = new File(path);
                //3.判断该文件夹是否存在
                if(!folder.exists()/*文件是否存在*/&&!folder.isDirectory()/*是否是文件夹*/){
                        folder.mkdirs();//创建
                }
                //4.获取文件的集合 - 想想集合的继承的结构图
                Collection<Part> parts =request.getParts();
                if(parts.size()==1){//单文件上传
                        //Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。
                        //A.获取Part文件对象
                        Part part = request.getPart("photo");//获取上传的文件 <input type="file" name="photo">
                        //B.获取文件名称:
                        //Servlet3.0 没有提供直接获取文件的名称 , 所以需要读取头部信息获取文件名 - Tomcat 7
                        //Servlet 3.1 增加了新的方法 Part.getSubmittedFileName,用于取得客户端上传的文件名。 - Tomcat 8 
                        String clientFileName = extractFileName(part);
                        if(!clientFileName.isEmpty()){
                                //C.获取客户端的后缀名称
                                String ext = clientFileName.substring(clientFileName.lastIndexOf(".")+1);
                                //D.创建上传文件的名称[新文件名称]
                                //方式一:
                                String uploadNewFileName = (new Date()).getTime()+"_"+(new Random()).nextInt(1000)+"."+ext;
                                //E.上传文件
                                part.write(path+File.separator+uploadNewFileName);
                        }
                }else{//多文件上传
                        //一次性上传多个文件
                        for (Part part : parts) {//循环处理上传的文件
                                //A.获取文件名称:
                                String clientFileName = extractFileName(part);
                                if(!clientFileName.isEmpty()){
                                        //B.获取客户端的后缀名称
                                        String ext = clientFileName.substring(clientFileName.lastIndexOf(".")+1);
                                        //C.创建上传文件的名称[新文件名称]
                                        String uploadNewFileName = UUID.randomUUID().toString()+"."+ext;
                                        //D.上传文件
                                        part.write(path+File.separator+uploadNewFileName);
                                }
                        }
                }
        }
        /**
     * 从 HTTP header content-disposition中获得文件名
     * content-disposition中内容:form-data; name="dataFile"; filename="PHOTO.JPG"
     */
    private String extractFileName(Part part) {
        String contentDisp = part.getHeader("content-disposition");
        String[] items = contentDisp.split(";");
        for (String s : items) {
            if (s.trim().startsWith("filename")) {
                return s.substring(s.indexOf("=") + 2, s.length()-1);
            }
        }
        return "";
    }
 
}


相关文章

  • 008.Servlet3.0 多文件处理

    依然是没有进行封装处理和验证处理 JSP页面代码 Servlet代码

  • 多文件上传处理

    1,采用苹果原生NSMutableURLRequest请求 //1. NSURLNSURL *url = [NSU...

  • PHP学习笔记之文件上传类代码实现

    文件上传类代码示例: 单文件上传表单: 多文件上传表单: 文件上传处理php代码:

  • 怎么实现PDF文件压缩

    办公处理PDF文件时,如果PDF文件是由多中小文件组成,通常来说文件就比较大了。一般会将文件进行压缩处理,这样也方...

  • php文件上传

    单文件上传实现: 文件上传代码参考:文件上传 多文件上传实现: 前台调用: shell方式 浏览器方式: 后台处理...

  • webpack常用loader

    文件处理loader:可以处理图片,字体,txt等 url-loader:file-loader所有的功能都有.多...

  • 一分钟轻松合并pdf

    一分钟轻松合并pdf。想必大家在都在处理pdf文件时候,遇到过要处理多份pdf文件的合并通常不知道如何处理了。很多...

  • 10_窥探Mach-O的工具

    一、file:查看Mach-O的文件类型 file 文件路径 二、lipo:常用于多架构Mach-O文件的处理 查...

  • webpack

    基本配置 拆分配置和merge 启动本地服务 处理ES6 处理样式 处理图片 高级配置 多入口 抽离CSS文件 抽...

  • [Node] 随遇而安 TypeScript(十):查找引用

    背景 上文我们从 VSCode Go to Definition 出发,介绍了 TypeScript 处理多文件的...

网友评论

      本文标题:008.Servlet3.0 多文件处理

      本文链接:https://www.haomeiwen.com/subject/tcewnttx.html