Spring MVC的文件下载

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1、使用虚拟路径方式</span>

1)首先需要配置虚拟路径,将一个url对应到服务器的一个文件夹

2)url + 文件名即可在浏览器上访问服务器中的文件,当浏览器不支持的文件时,浏览器自动下载

此方法有两个弊端: 1)当浏览器支持直接打开文件(如图片)时,文件不会被下载。        ps:可能有办法设置,我不知道

     2)下载的文件名与服务器中的文件名是一样的,而存放在服务器中的文件名通常是包含时间信息的长字符串,这样下载下来的文件名就是不是很好

1.2、tomcat 虚拟路径配置

<-- <span style="font-family: Arial, Helvetica, sans-serif;">打开Tomcat7/conf/web.xml,找到</span> -->
<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<-- <param-value>处将false改为true -->
<-- 再打开server.xml -->
在</host>之前加入<Context path="/名字" docBase="D:\Tomcat 7.0\文件夹名"/>


2、使用ResponseEntity 方式下载

@RequestMapping("download")
public ResponseEntity<byte[]> download() throws IOException {
	HttpHeaders headers = new HttpHeaders();
	headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
	headers.setContentDispositionFormData("attachment", "文件名+文件类型");
	return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(File对象), headers, HttpStatus.CREATED);
}
上诉ResponseEntity<byte[]> 构造方法中第一个参数为byte数组类型


当得到的是InputStream时,需要一个方法将InputStream流转换成byte数组

public static byte[] getByteArray(InputStream inputStream) throws IOException {
    ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
    byte[] buff = new byte[2048];
	int bytesRead = 0;
	while ((bytesRead = inputStream.read(buff, 0, 100)) > 0) {
		swapStream.write(buff, 0, bytesRead);
	}
	return swapStream.toByteArray();
}

上传使用input的file标签,在后台使用CommonsMultipartFile对象可以直接获取到file,继而进行其他操作


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值