[设置文件名]springmvc 实现文件下载 ResponseEntity<byte[]> 松耦合

摘要: springmvc 实现文件下载 ResponseEntity 松耦合

1、controller实现

    

@RequestMapping("download")  
	public ResponseEntity<byte[]> download() throws IOException {  
	    HttpHeaders headers = new HttpHeaders();  
	   // headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);  
	    //设置文件名
	    headers.setContentDispositionFormData("attachment""a.xls");  
	    String file = TestController.class.getResource("/config/").getPath()+"a.xls";
	    
	    //把文件转成字节数组
	    File byteFile = new File(file);
	    int size = (int) byteFile.length();
	    FileInputStream inputStream = new FileInputStream(byteFile);
	    byte[] bytes = new byte[size];
	    
	    int offset=0;
	    int readed;
	    while(offset<size && (readed = inputStream.read(bytes, offset,inputStream.available() )) != -1){
	    	offset+=readed;
	    }
	    inputStream.close();
	    
	    //返回
	    return new ResponseEntity<byte[]>(bytes,headers, HttpStatus.OK);  
	}

 

2、在springmvc.xml配置里面如果配置了messageConverters,则要加上ByteArrayHttpMessageConverter

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<!-- add ByteArrayHttpMessageConverter here -->
				<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
				
				<bean class="org.springframework.http.converter.StringHttpMessageConverter">
					<property name="supportedMediaTypes">
						<list>
							<value>text/plain;charset=UTF-8</value>
							<value>text/html;charset=UTF-8</value>
						</list>
					</property>
				</bean>
				  
				<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
					<property name="supportedMediaTypes">
						<list>
							<value>application/json;charset=UTF-8</value>
						</list>
					</property>

				</bean>
			</list>
		</property>
	</bean>

    因为在xml里配置了AnnotationMethodHandlerAdapter,则会覆盖掉AnnotationMethodHandlerAdapter源码中默认的ByteArrayHttpMessageConverter,造成下载文件乱码

转载于:https://my.oschina.net/airship/blog/1507165

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值