文件的上传和下载

Posted 冰封绝恋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件的上传和下载相关的知识,希望对你有一定的参考价值。

文件上传

文件上传需要用到两个类,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();
            byte[] b=new byte[1024];
            while(fis.read(b)!=-1){
                out.write(b);
            }
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

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

以上是关于文件的上传和下载的主要内容,如果未能解决你的问题,请参考以下文章

用于从 cloudkit 检索单列的代码模式/片段

大文件上传下载分片断点续传教程

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”

VIM 代码片段插件 ultisnips 使用教程

代码学习PHP文件的上传和下载

SpringMVC_[4]文件上传和下载