您的位置:首页 > 编程语言 > Java开发

Spring MVC下载文件、上传

2018-01-24 20:49 423 查看
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();

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: