Spring MVC下载文件、上传

1、这是SpringMVC封装的东西,代码比较简单,但是局限性很大,貌似超过1.4G就会包异常,
前端不用ajax请求,<a herf="action"></a>即可。

 @RequestMapping("/downbrowser1")    
    public ResponseEntity<byte[]> download(String fwqlj) throws IOException {
         HttpHeaders headers=null;
         File file=null;
        if(fwqlj!=null){
        //文件指定的路径
             file=new File("D:\\demo\\tzf.xlsx");  
             headers= new HttpHeaders();    
             String fileName=new String(file.getName().getBytes("UTF-8"),"iso-8859-1");//为了解决中文名称乱码问题  
             headers.setContentDispositionFormData("attachment", fileName);   
             headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);   
        }
       
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),    
                                          headers, HttpStatus.CREATED);
    }  
    
     2、这个就比较通用了,几乎没有局限性,就是有点慢。不过比较大的文件都会使用ftp服务器。
    @RequestMapping("/downbrowser")    
    public void download1(HttpServletRequest request,
            HttpServletResponse response,String fwqlj) throws IOException {
      //从前端传入一个文件的路径
        if(fwqlj!=null){
            File file = new File(fwqlj);  
            //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型  
            response.setContentType("multipart/form-data");  
            //2.设置文件头:最后一个参数是设置下载文件名(假如我们叫demo.doc)
            String file_name = URLEncoder.encode(file.getName(),"UTF-8");
            response.setHeader("Content-Disposition", "attachment;fileName="+file_name);
            ServletOutputStream out=null;  
            //通过文件路径获得File对象(假如此路径中有一个download的文件)
         try {  
             FileInputStream inputStream = new FileInputStream(file);  
   
             //3.通过response获取ServletOutputStream对象(out)  
             out = response.getOutputStream();  
   
             int b = 0;  
             byte[] buffer = new byte[1024];  
             b = inputStream.read(buffer);
             while (b != -1){    
                 //4.写到输出流(out)中  
                 out.write(buffer,0,b);  
                 b = inputStream.read(buffer);
             }
             if(inputStream!=null){
                 inputStream.close();
             }
         } catch (IOException e) {
             e.printStackTrace();  
         }finally {
         //记得一定要关闭
            if(out!=null){
                out.close();  
                out.flush();
            }
        }
        }

    }

3、这是一个文件的上传,很简单,直接上代码
     @RequestMapping("/wjsc")
    @ResponseBody
    public String  uplodFile(HttpServletRequest request,Model model){
        Msg m=null;
        String fwqlj = request.getParameter("demo1");
        String mksm = request.getParameter("demo2");
        String lx = request.getParameter("demo3");
        String mklx = request.getParameter("demo4");
        String fwqljr="";
         try {
             File f=null;
             if(fwqlj!=null){
                 f=new File(fwqlj);
             }
             if(f!=null && !f.exists()){
                 f.mkdirs();
             }
            //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)
               CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
               request.getSession().getServletContext());
                //检查form中是否有enctype="multipart/form-data"
               if(multipartResolver.isMultipart(request)){
                    //将request变成多部分request
                    MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
                   //获取multiRequest 中所有的文件名
                    Iterator<String> fileNames = multiRequest.getFileNames();
                     
                    while(fileNames.hasNext())
                    {
                        //一次遍历所有文件
                        MultipartFile file=multiRequest.getFile(fileNames.next().toString());
                        if(file!=null)
                        {
                        //随机生成long类型的8位数字串
                            Long long1 = UUIDGenerator.getUniqueLong();
                            String path ="/"+long1+file.getOriginalFilename();
                           fwqljr=fwqlj+path;
                            //上传
                            file.transferTo(new File(fwqljr));
                        }
                         
                    }
                }
               //把路径保存到数据库
                boolean g;
             if (gggnService.insertfwqlj(fwqljr, mksm, lx, mklx)) g = true;
             else g = false;
             m=new Msg();
             if(g){
                 m.setMsg("上传成功");
               }else{
                  m.setMsg("该模板已经存在");
               }
        } catch (IOException e) {
             m.setMsg("文件已经存在或者服务异常");
            log.error("上传文件失败",e);
        }
        return m.getMsg();
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值