首页 > 代码库 > springMVC下载文件前修改文件名字

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 = "http://www.mamicode.com/downloadFile/download?path=" + imgURL  + "&name=" + documentName + "." + documentType;

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

springMVC下载文件前修改文件名字