zoukankan      html  css  js  c++  java
  • springMVC下载文件前修改文件名字

    很多时候,为了方便,下载文件其实就直接写了一个文件在服务器上面的路径,然后直接点击一个这个地址,浏览器就自然而然的开始下载了。

    但是这次项目需要在文件下载之前修改文件的名字,也就是说,服务器上文件的名字和下载到本地文件的名字是不一样的。

    而在springMVC中怎么实现呢?

    下面就是代码部分

    /**
     * 下载文件
     * @author xx
     *
     */
    @Controller
    @RequestMapping("downloadFile")
    @Scope(value="prototype")
    public class DownloadController {
        
        /**
         * 下载文件
         * @param path 下载文件的路径
         * @param name 下载文件的名字,需要包含后缀名
         * @return 下载文件的字节数组
         */
        @RequestMapping("download")    
        public ResponseEntity<byte[]> download(String path,String name, HttpServletRequest request){
            //设置http协议头部
            HttpHeaders headers = new HttpHeaders();
            
            //设置文件名
            String fileName = "";
            try {
                fileName = new String(name.getBytes("UTF-8"),"iso-8859-1");//为了解决中文名称乱码问题  
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            
            //头部设置文件类型
            headers.setContentDispositionFormData("attachment", fileName);   
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);   
            
            //获取文件路径
            String targetDirectory = request.getServletContext().getRealPath("/") + path;
            File file=new File(targetDirectory);  
            
            //返回文件字节数组
            try {
                return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
            } catch (IOException e) {
                e.printStackTrace();
                return null;    
            }
        }
    }

    前端用get或者post均可,可以根据自己的情况来,还有需要修改的是,代码中获取文件路径的地方,有的项目是有文件服务器的,所以这个地方不能这么写,还有的项目数据库保存的可能路径不一样,反正需要根据自己的实际情况来修改,如果文件不存在就会报错的。

    window.location.href = "/downloadFile/download?path=" + imgURL  + "&name=" + documentName + "." + documentType;

    需要注意的是,需要判断文件在服务器上面是否存在,在代码中我没写实现,但是实际情况需要判断的。

  • 相关阅读:
    TabActivity 、fragemnt+fragment 和 Fragment+Viewpager 优缺点
    Android App的签名打包(晋级篇)
    Android ProgressBar 进度条荧光效果
    Android UI【android 仿微信、QQ聊天,带表情,可翻页,带翻页拖动缓冲】
    Android UI--自定义ListView(实现下拉刷新+加载更多)
    Android平台下利用zxing实现二维码开发
    自定义组件---图片和文字实现ImageButton效果
    JNI由浅入深_10_JNI 综合开发
    开关按钮实现
    Android Asynctask与Handler的比较,优缺点区别,Asynctask源码
  • 原文地址:https://www.cnblogs.com/linkstar/p/5902769.html
Copyright © 2011-2022 走看看