文件下载
在使用Spring的文件下载和上传功能时,可以直接向前端返回ResponseEntity
类型的数据。功能代码如下:
public ResponseEntity<byte[]> fileDownload(HttpServletRequest request, String url, String fileName) throws Exception {
InputStream in = new FileInputStream(new File(url)); byte[] body = new byte[in.available()]; in.read(body); fileName = new String(fileName.getBytes("gbk"), "iso8859-1") + ".exe"; //设置文件名 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Disposition", "attachment;filename=" + fileName); HttpStatus status = HttpStatus.OK; ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(body, headers, status); return responseEntity; }
以上代码根据使用中的不同需要对应替换。但是,在调用结束后浏览器确实下载了文件,但是打开发现出现乱码的情况,并且文件会比真实文件稍大一些。
解决乱码
在使用SpringMVC时,我们注意到出现这种问题的原因是JSON数据在比特流传递的时候的编码解码问题导致了乱码的出现。我们只需要配置ByteArrayHttpMessageConverter便可以解决。但是SpringBoot没有xml配置文件,我们应该如何操作呢?
- 在SpringBoot的配置文件中添加ByteArrayHttpMessageConverte的Bean。
@Bean public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter() {
return new ByteArrayHttpMessageConverter(); }
- 在注册转换器configureMessageConverters方法中添加该Bean。
@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(byteArrayHttpMessageConverter()); converters.add(...); //其他的转换器 }
前端测试
在Controller中做好RequestMapping的方法之后,将比特流返回给前端,前端直接打开新的网页开始下载。
window.open("/webApi/webuser/download/" + downloadName);
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220028.html原文链接:https://javaforall.net
