• spring文件的上传和下载


    文件上传

    文件上传需要用到两个类,MultipartFile和MultipartHttpServletRequest,它们都是在spring的web包中,同时需要在spring容器中配置MultipartResolver

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        
        </bean>

    注意:此处的id必须取multipartResolver这个名字,否则配置无效。

    MultipartFile用于接收从页面传过来的文件

    MultipartHttpServletRequest可以处理多个上传文件

        @RequestMapping(value="upload2",method=RequestMethod.POST)
        public void upload2(MultipartHttpServletRequest request,HttpServletResponse response){
            Iterator<String> itr=request.getFileNames();
            
            while(itr.hasNext()){
                MultipartFile myfile=request.getFile(itr.next());
                String originName=null;
                try {
                     originName=new String(myfile.getOriginalFilename().getBytes("iso-8859-1"),"utf-8");
                } catch (UnsupportedEncodingException e1) {
                    e1.printStackTrace();
                }
                String realPath=request.getServletContext().getRealPath("/upload")+"/"+originName;
                try {
                    myfile.transferTo(new File(realPath));//该方法用于传输文件到指定路径
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }

    单个的文件上传把参数MultipartHttpServletRequest改为MultipartFile

    @RequestMapping(value="upload",method=RequestMethod.POST)
        public void upload(MultipartFile myfile,HttpServletRequest request,HttpServletResponse response){
      ......
    }

    文件下载

    以前的想法,文件下载直接把超链接指定到文件所在位置,但这种方式在某些浏览器行不通。

    解决办法是:链接访问后台,由后台处理传输字节流,返回给前台。

        @RequestMapping("download")
        @ResponseBody
        public void download(HttpServletRequest request,HttpServletResponse response){
    
            String path="1.docx";
            String realpath=request.getServletContext().getRealPath("/upload")+"/"+path;
            File file=new File(realpath);
            StringBuffer sb=new StringBuffer();
            try {
                FileInputStream fis=new FileInputStream(file);
                ServletOutputStream out=response.getOutputStream();

                  response.setHeader("Content-Disposition",
            "attachment; filename="+new String("1.xxx".getBytes("iso8859-1"),"utf-8"));//设置下载文件的文件名

            byte[] b=new byte[1024];
                while(fis.read(b)!=-1){
                    out.write(b);
                }
                
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    这样就可以处理在任何浏览器中的下载功能。

    注意此处的response.setHeader方法,该方法用于设置下载文件的名称,如果不设置,下载的文件就不能按正确的格式打开。

  • 相关阅读:
    高清摄像头MIPI接口与ARM处理器的连接
    How to make apq8084
    DBI接口和DPI接口的区别
    MIPI DSI协议介绍
    LCD显示的一些基本概念以及DSI的一些clock解释
    AXI总线
    SPI,UART,I2C都有什么区别,及其各自的特点
    图像滤镜处理算法:灰度、黑白、底片、浮雕
    用到的一些算法收集
    实用Linux命令,不求最全但求实用-------iptables命令实战
  • 原文地址:https://www.cnblogs.com/yxjdragon/p/5939746.html
Copyright © 2020-2023  润新知