java上传文件,下载文件

我这是使用springboot写的不用导额外的包,如果ssm做的话需要导包可以查看下面这个

https://blog.csdn.net/kxj19980524/article/details/83536366

上传文件

在input框里加上multiple属性,就可以一个input框一下上传多个文件

这是上传按钮的事件 FormData这一行就这么写就行,参数换成form表单的id,直接就把form表单里所有参数传到后台了,包括上传的文件.

   //点击上传
    $("#businessLicenseBtn").click(function () {  //加一个单击事件按钮
        var formd = new FormData($("#userCompleteForm")[0]);    //$("#userCompleteForm")[0]:把form表单对象转换为js对象
        $.ajax({
            url:"${pageContext.request.contextPath}/WitkeyDemandScheme/uploadSchemes",//跳转到后台路径
            type:"post",
            data:formd,
            dataType:"json",
            processData:false,    //用form表单的enctype对象   这两个属性加上就行了
            contentType:false,      //默认为true,上传数据转为对象,为false  不转为对象
            success:function (data) {
                var div1 = $("#div1");
                $(data).each(function (a,b) {
                    div1.append(b+"<input type='button' onclick='deleteScheme("+b+")' value='删除'/><br/>")
                })
            },
            error:function(){
                alert("上传失败!")
            }
        })
    })

 这是后台上传文件的代码,跟上传单个文件一样,只不过,sql语句使用foreach变量就好了,这里面逻辑就是把文件名字多加了点避免上传上去的文件名重复.

    //批量上传文件
    @RequestMapping("/uploadSchemes")
    @ResponseBody
    public List<String> uploadSchemes(MultipartFile[] files,Integer demandId,Integer userId){
        List<String> list = new ArrayList<>();
        String realPath = "E:\\idea\\project\\springboot\\witkey\\src\\main\\webapp\\uploads\\files";
       for(int i=0;i<files.length;i++){
           long size = files[i].getSize();
           if(size>1000000){
               list.add("该文件太大,无法上传");
               return list;
           }
           //获取文件名称
           String filename = files[i].getOriginalFilename();
           filename = saveNewFileName(filename,demandId,userId);
           list.add(filename);
           File f = new File(realPath+File.separator+filename);
           try {
               files[i].transferTo(f);
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
        witkeyDemandSchemeService.insertDemandSchemes(demandId,userId,list);
        return list;
    }

    private String saveNewFileName(String filename, Integer demandId, Integer userId) {
        int index = filename.indexOf(".");
        return filename.substring(0,index)+"_"+demandId+"_"+userId+filename.substring(index);
    }

 

文件下载

前台就是写了个单击事件,把文件名称传到后台了 

 

这是后台的controller方法,接收方式必须是restful风格接收参数不然会下载不正确

import org.apache.tomcat.util.http.fileupload.IOUtils;
 
   @RequestMapping("/downloadScheme/{filename:.+}")
    public void downloadScheme(@PathVariable String filename, HttpServletResponse response){
        //获取下载路径
        String realPath = "E:\\idea\\project\\springboot\\witkey\\src\\main\\webapp\\uploads\\files";

        File file = new File(realPath,filename);
        //读取下载的文件
        try(
                InputStream in = new FileInputStream(file);
                OutputStream out = response.getOutputStream();
                ){
            response.setContentType("application/x-download");
            filename= URLEncoder.encode(filename,"UTF-8");
            response.addHeader("ContentDisposition","attachment;filename="+filename);
            IOUtils.copy(in,out);
            out.flush();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

实现效果

 

猜你喜欢

转载自blog.csdn.net/kxj19980524/article/details/86213550