Web文件上传

实现文件上传必须把设置为enctype=“multipart/form-data” 请求方式为post如

 <form id=""   action="" method="post"  enctype="multipart/form-data"> 

传统文件上传

需要工具类:commons-io-2.6-bin和commons-fileupload-1.4-bin

public void fileUp(HttpServletRequest request){
    //让浏览器用utf8来解析返回的数据
response.setHeader("Content-type", "text/html;charset=UTF-8");
//告诉servlet用UTF-8转码,而不是用默认的ISO8859
response.setCharacterEncoding("UTF-8");
//解决文件名
request.setCharacterEncoding("utf-8");
    //获取路径
    String path = "";
    //判断路径是否存在
    File file = new File(path);
    if(!file.exists()){
        //创建文件
        file.mkdir();
    }
    
        //解析request对象,获取上传文件项
        DiskFileItemFactory factory = new DiskFileItemFactory();
       //设置缓冲区大小
        factory.setSizeThreshold(1024 * 100);
        //设置临时文件路径
        factory.setRepository(tempFile);
        //创建文件上传处理器
        ServletFileUpload upload = new SerletFileUpload(factory);
        //解决上传文件名的中文乱码
        upload.setHeaderEncoding("UTF-8");
        //设置上传单个文件的大小的最大值,目前是设置为1024*1024字节,也就是600MB
        upload.setFileSizeMax(1024 * 1024 * 600);
        //设置上传文件总量的最大值,最大值=同时上传的多个文件的大小的最大值的和,目前设置为1000MB
        upload.setSizeMax(1024 * 1024 * 1000);
        //解析request
        List items = upload.parseRequest(request);
        //遍历
        for(FileItem item : items){
            //进行判断,当前item对象是否是上传文件项
            if(item.isFormField()){
                //说明是普通表的项
            }else{
                //说明是上传文件项
                
                //获取上传文件名称
                String filename = item.getName();
                //处理不同浏览器传来的文件名问题
                int index=name.lastIndexOf("\\");
                if(index!=-1) {
                    filename=name.substring(index+1);
                }
                //完成文件上传
                item.write(new File(path,filename))
                //删除临时文件
            }
        }
}

SpringMVC文件上传

先SpringMVC配置文件解析器

<!-- 文件解析器--> 
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">       
<property name="maxUploadSize" value="10485760"/>
</bean>

例子一

public String handler(@RequestParam("uploadfile") List uploadfile, HttpServletRequest request) throws IOException {
    System.out.println("进入servlet");
    if(!uploadfile.isEmpty()&&uploadfile.size() > 0){
        //循环输出上传文件
        for(MultipartFile file : uploadfile){
            //获取上传文件原始名称
            String filename = file.getOriginalFilename();
            //设置保存目录
            String dirPath = request.getServletContext().getRealPath("/upload/");
            File filePath = new File(dirPath);
            if(filePath.exists()){
                filePath.mkdirs();
            }
            //重新命名上传文件名称
            String newFilename="1"+filename;
            System.out.println("上传成功");
            //完成文件上传
            file.transferTo(new File(dirPath+newFilename));
        }
    }
    return "success.jsp";
}

例子二

public String addProduct(MultipartFile upload, Products product, HttpServletRequest request) throws IOException {
    //文件保存路径
    String path = request.getSession().getServletContext().getRealPath("/client/bookcover/");
    //数据库保存路径
    String dataUrl = "/client/bookcover/";
    //获取文件名
    String fileName = upload.getOriginalFilename();
    //完成上传
    upload.transferTo(new File(path,fileName));
    
    return "/listProduct";
}
展开阅读全文
©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读