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;

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

时间: 2024-10-06 19:44:16

springMVC下载文件前修改文件名字的相关文章

springMVC下载FTP上的文件

springMVC下载FTP上的文件 今天没时间写.先上传 一个工具类 工具类 package com.utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.lang3.StringUtils; import org.apache.commons.net.ftp.FTPClient; import org.apache.c

按日期把文件区分&&修改文件的mtime

模拟场景: 在一个目录下存在不同天产生的大量文件,而且文件命名没有日期的标识,如何把这些文件按照日期分到不同的文件夹. 按照文件修改的日期也就是mtime把文件做区分 > date Tue Dec 20 14:04:04 CST 2016 修改文件的mtime /sysout> touch -c -t 12180010 file{101..200} 12180010表示12月18号0点10分 /sysout> find -mtime +1 -type f | more ./file135

Linux中批量添加文件和修改文件小笔记

1.#使用通配符批量创建5个文件 $ touch file{1..10}.txt 2.#批量修改这五个后缀名为.txt的文本文件名重命名为.c后缀名结尾的文件 $ rename 's/\.txt/\.c/' *.txt 3.批量就爱那个这五个文件的文件名改为大写 $ rename 'y/a-z/A-Z/' *.c

批量创建文件和修改文件

1.使用for循环在/oldboy目录下创建安10个文件,名称依次为:oldboy-1oldboy-2..................oldboy-10 脚本如下: 1 [[email protected] tmp]# cat oldboy.sh 2 #!/bin/sh 3 mkdir -p /tmp/oldboy && cd /tmp/oldboy 4 for n in {1..10} 5 do 6 touch oldboy-$n 7 done 执行结果: 1 [[email pro

python 遍历所有文件,修改文件内的内容

__author__ = 'Administrator' import os import shutil class CFileOperator(object):     def __init__(self):         self._m_FilePath = os.getcwd()         self._m_FileContent = []         self._m_sError = ""     def GetFileContent(self, filepath=&

Linux如何修改文件权限

Linux如何修改文件权限 修改文件权限前,需要了解一下权限中的”rwx”与数字的对应关系,其中r=4,w=2,x=1. 例如:”drwxr-xr-x”,第一个”d”是代表文件夹,这里不用考虑,后面九个字符,每三个一组相加: rwx=4+2+1=7 r-x=4+0+1=5 那么drwxr-xr-x = 755 同理-rwxrw-rw- = 766 (rw-就是 4+2+0=6) 可以通过”chmod”来修改文件属性中的权限字段的值,请看下面的实例: 1 /*新建一个文件*/ 2 [[email 

第八天 文件的读,写,追加,读写,写读,seek()光标的移动,修改文件以及另一种打开文件的方式

主要内容:    1.初始文件操作 2.只读( r,rb ) 3.只写( w,wb ) 4.追加( a ,ab) 5.读写( r+ ) 6.写读( w+ ) 7.追加写读 ( a+ ) 8.其他操作方法 9.文件的修改以及另一种打开文件句柄的方式 一.初始文件的操作    使用python来读写文件是非常简单的操作. 我们使用open()函数来打开?个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. 根据打开方式的不同能够执行的操作也会有相应的差异. 打开文件的方式: r,

Java之扫描目录,修改文件内容

扫描目录下文件,修改文件中指定内容 1 package org.utils.tools.fileoper; 2 3 import java.io.*; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 /* 8 * 修改文件中的内容 9 * 替换properties文件中的ip 10 * */ 11 public class EditFile { 12 public static void main(String args[])

20141227文件夹和文件操作二

文件操作 对文件里面的内容进行读写 PHP5文件操作 将文件的内容整个进行读取和写入 读取文件 file_get_contents:从一个指定的文件内读取数据内容. 写入内容 file_put_contents:将指定的字符串写入到对应的文件 注意:file_put_contents如果要写入的文件不存在,系统会自动创建,有的话就直接写入 默认的file_put_contents写入数据的时候,会先清空数据再写入 如果要在文件后面追加内容:应该使用file_put_contents的第三个参数