springboot ResponseEntity 实现文件下载(文件损坏,以及乱码)

AttachedFile attachedFile = attachedFileService.selectById(fileId);
String filePath = pathHead + attachedFile.getFilePath();
String fileName = attachedFile.getFileName() + "." + attachedFile.getExtension();
FileSystemResource file = new FileSystemResource(filePath);
HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", fileName));
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
return ResponseEntity
.ok()
.headers(headers)
.contentLength(file.contentLength())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(new InputStreamResource(file.getInputStream()));
//HttpHeaders headers = new HttpHeaders();
////下载显示的文件名,解决中文名称乱码问题
//String downloadFileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
////通知浏览器以attachment
//headers.setContentDispositionFormData("attachment", downloadFileName);
////application/octet-stream : 二进制流数据(最常见的文件下载)。
//headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//return new ResponseEntity<>(FileUtils.readFileToByteArray(file),
// headers, HttpStatus.CREATED);

    我是按照网上正常给的教程写的,但是就是文件损坏,(好像是数据流就不对)

    ![图片说明](http://i![图片说明](https://img-ask.csdn.net/upload/201711/05/1509890721_393189.png)mg.ask.csdn.net/upload/201711/05/1509890701_819933.png)

2个回答

我也被这个问题困扰了蛮久。归根到底还是不了解springboot的配置。
mvc的配置如何转换成springboot的配置就是解决这个问题的关键

1楼回答的是在MVC配置文件里面解决。

springboot的解决方案是增加如下一个类 去配置 MessageConverters。
加上注解@Configuration 就会被springboot加载配置。成功解决如上问题。

@Configuration
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    super.configureMessageConverters(converters);
    converters.add(new ByteArrayHttpMessageConverter());
}

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ResponseEntity实现文件下载
需求: 点击页面上的超链接,然后下载服务器端的文件: ResponseEntity需要传入3个参数,分别是:请求体、请求头和状态码 具体的代码如下: @RequestMapping("/testResponseEntity") public ResponseEntity testResponseEntity(HttpSession session) throws IOExce
SpringMVC 使用ResponseEntity实现文件下载
下载文件: (1)获取要下载的文件名,注意编码; (2)在HttpHeaders中设置以下载方式打开,设置MIME类型; (3)用FileUtils.readFileToByteArray()读取文件数据;用ResponseEntity构建返回对象 /** * Create a new {@code HttpEntity} with the given body, headers,...
SpringMVC使用ResponseEntity实现文件下载
上一篇写了文件上传,文件下载的配置过程同文件上传,有需要的请http://blog.csdn.net/c______________/article/details/77512017 本文主要通过ResponseEntity//下载练习 @RequestMapping(value="/testDownload") public ResponseEntity<byte[]> tes
springmvc ResponseEntity 下载文件损坏问题解决方法
这两天做一个文件下载功能,基本上使用的就是springmvc的ResponseEntity来做的,这块代码就不贴了,网上大把大把的,问题是下载的文件总是提示【文件损坏】导致打不开,word,excel,zip文件统统打不开,研究来研究去网上答案很多但是都不解决问题,唯一解决问题的就是这个帖子,地址如下:http://www.iteye.com/topic/1125784,作者解决问题的思路也很棒。...
关于PHP文件下载乱码(损坏)的问题
帮系做了一个网站,有一个上传资源和下载资源的模块.rnrn 部署在我机器上时,上传上去的文件下载来下都是没有问题的(doc,txt...都正常).rnrn 但部署到服务器上去(win server 2003),文件下载下来都是乱码的,除了只有英文的txt文件.rnrn 服务器上的用的是apache2.2 php5,而且php5的HOME是用我机器上的HOME覆盖的.rnrn 请教大家,这个问题的原因是什么?(系统文件编码?)rn 怎么解决这个问题?rnrn 谢谢.急...
SpringBoot实现文件下载
在写java 的文件下载的时候一直抛出异常 getOutputStream() has already been called for this response 抛出异常getOutputStream() has already been called for this response 直到使用了下面的方法: /** * 稿源周报excel表格下载 * @ret...
springboot实现文件下载
springboot实现文件下载 1.新建一个springboot项目 2.pox.xml文件 &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt; &amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;...
springboot实现文件下载和文件上传
1.文件上传功能:直接看controller@PostMapping(&quot;/uploadFile&quot;) public @ResponseBody String singleFileUpload(@RequestParam(&quot;file&quot;)MultipartFile file){ //判断文件是否为空 if(file.isEmpty()){ return &quot;文件为空,上传失...
SpringBoot ajax文件下载实现
实现Ajax文件下载可以从后台直接返回一个Base64编码格式的文件,在前台用JS的atob()方法直接转为Blob格式的数据,然后创建一个A标签,来下载它。 前台 JS function doAjaxDownload() {     $.ajax({         type : &quot;post&quot;,         url : &quot;/Sample/ajaxDownload&quot;,         da...
SpringBoot 实现文件下载
文件下载的功能,在此是点击了下载的链接以后,前台把资源的ID返回到后台请求下载。后台先把该资源的URL获取出来,若资源不存在,则返回“-1”。 /* * 下载文件 */ @RequestMapping("/download") @ResponseBody public String downloadFile(HttpServletRequest request, @Req...
springmvc中利用ResponseEntity进行文件下载
@RequestMapping(value=&quot;/testResponseEntity&quot;) public ResponseEntity&amp;lt;byte[]&amp;gt; testResponseEntity(HttpServletRequest request) throws Exception{ byte[] body = null; InputStream is = request.getS...
springboot之自定义属性以及乱码三
自定义属性的使用(读取配置文件,在项目启动的时候根据@Value去配置文件中获取属性) 在建好的springboot项目properties属性中自定义属性,如下: 通过@Value获取自定义属性 @Value(&quot;${name}&quot;) 启动项目: 访问路径: 解决乱码 一,在properties属性中配置如下: 二,配置项目环境编码 打开file-&amp;gt;set...
struts2 文件下载,中文名称文件乱码
[code=java]rn 我在后台打了断点看了中文名称的文件均转码成功,但是不知道到了浏览器下载时就乱码了rn[img=https://img-bbs.csdn.net/upload/201506/27/1435373837_310857.png][/img]rn public InputStream getDownload()rn rn rn String agent = request.getHeader("USER-AGENT");rn if (null != agent) rn rn if (-1 != agent.indexOf("Firefox")) rn // Firefoxrn fileFileName = Tools.getGBK(fileFileName);rn rn else if(-1 != agent.indexOf("Chrome"))rn // Chromern fileFileName = Tools.getUTF8(fileFileName);rn rn elsern rn fileFileName = Tools.getGBK(fileFileName);rn ServletActionContext.getResponse().setHeader("Content-Disposition","attachment;fileName="+fileFileName);rn rn rn fileContentType = ServletActionContext.getServletContext().getMimeType(fileFileName)+ ";charset=UTF-8";rn rn InputStream inputStream = null;rn try rn rn inputStream = new FileInputStream(SysConstants.FILE_PATH+super.getUserName()+"/"+fileFileName);rn rn catch (FileNotFoundException e1) rn rn e1.printStackTrace();rn rn rn return inputStream;rn rnrn rn rn rn $fileContentTypern downloadrn attachment;filename="$fileFileName"rn 2048 rn rn rn[/code]
springboot(七):springboot如何实现文件下载
我们来赖回顾一下,上期所讲的内容是使用spring boot进行文件的上传管理, 比如在实际开发我们在前端所用到的图片文件,就需要将文件上传到服务器上, 要用的时候在去拿,这样就减少了本地内存的占用, 这里有个推荐七牛云大家可以去了解一下,对于文件的管理很有效果 介绍 开始今天的知识点,今天要说的是springboot去下载自己生成的xls文件, 我们将从数据库查询到的数据放入lxs文...
基于springboot实现的文件下载上传
利用springboot实现用户注册登录,完善个人资料,文件上传和文件下载,查看自己上传的文件,还有后台管理功能。数据库文件在压缩包中。
springboot实现excel文件下载的功能
场景:由于需要使用poi进行数据的导入和导出,在导入的时候excel的格式是很严格的,所以我们需要提供一个excel模板让运维人员添加数据然后再上传,这样格式就不会有问题了,虽然功能简单,但是copy了很多代码都是有问题的,最后好不容易找到个可以用的,分享一下 实现方法: 1.文件位置位于resoures文件夹下 2.源码 @RequestMapping(&quot;/download&quot;) ...
Springboot文件下载
Springboot对资源的描述提供了相应的接口,其主要实现类有ClassPathResource、FileSystemResource、UrlResource、ByteArrayResource、 ServletContextResource和InputStreamResource。 ClassPathResource可用来获取类路径下的资源文件。假设我们有一个资源文件test.tx
springboot文件下载
  springboot实现单个文件的下载 https://blog.csdn.net/wilson_m/article/details/79196966
SpringBoot文件下载
突然更改需求,说要下载图片。无脑了其实文件上传下载是一家的,但是我们用的比较多的还是文件上传。因为上传之后很少下载 在服务器上直接运行 不要就删除了。今天做了一个demo出来为大家分享分享  注意:要保证项目中 有目录的存在以及路径的存在 @RequestMapping(value="/download",method=RequestMethod.GET) public void downl
php实现文件下载,提示压缩包损坏解决方法
php将文件添加到压缩包中实现文件下载,最后下载下来的压缩包打不开,提示压缩包损坏。 错误代码如下:(网上大部分代码都是这种) $filename=$_POST['del']; if($filename!=''){ //去掉空值的情况(没有选中任何项,无表单传值) $fileurl = &quot;upload/download.zip&quot;...
SpringBoot的文件下载
SpringBoot的文件下载方法有很多,此处只记录使用Spring的Resource实现类FileSystemResource做下载,其余实现类照葫芦画瓢即可。 直接上干货: 第一、下载模版(下载的主要代码)/** * 文件下载 * * @param file * @return */ public ResponseEntity<Fil
springboot之文件下载
包含技术Linux、Redis、spring boot、文件上传下载、FreeMarker、thymeleaf、spring jdbc、Spring Data JPA、 MyBatis、 Mybatis Generator逆向生成、CKEditor、AJAX异步上传文件、Jersey实现应用服务器和文件服务器分离、Elasticsearch
解决SpringMVC返回的ResponseEntity出现乱码
问题:前台通过数据到后台查询相关数据,结果是后台返回的数据出现中文出现乱码,如下图所示 原因:对于String类型,在没有在代码中明确指定编码类型的情况下,可能后台对传输的数据没有正确编码(本人的猜测,时间有限,后面有时间会跟下源码和看看文档,发现真正的原因) 解决:将String类型改为用户自定义的Pojo,如User等,或者改为List这些比较高级一点的数据类型。然后通过@Resp
ResponseEntity发送乱码,HttpResponse response接收乱码问题解决
在通过HttpClient或URL方式请求数据的过程中,难免会出现乱码的问题,笔者在项目开发过程中就遇到了此问题,在网上找了一堆资料,都是在接收端解决问题,忽略了发送端的编码问题,所以在接收端所有办法都用了还是不行,现在把解决的办法贴出业,希望能帮助到遇见相同问题的朋友。直接上代码 一、接收端  import java.io.BufferedReader; import java.io.IOE...
SpringBoot文件下载-下载指定路径下的文件
下载指定路径下的文件 Controller代码 import com.thunisoft.jy.imp.utils.DownloadFileUtil; import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.InputStreamResource; i...
SpringBoot多文件上传和文件下载
1,首先在你的src-&amp;gt;main-&amp;gt;wabapp新建文件夹,例:
springboot四之web应用文件下载
知识点: 1 掌握了themeleaf, 2 应用MultipartFile获取文件。 3 单文件和多文件上传使用post请求上传到服务器,服务器处理post请求。   工程浏览: https://github.com/chen-liang-ying/springboot-demo      ...
Springboot文件下载代码
该案例简单使用,分享给大家: 直接上代码 @RequestMapping("/excel") public ResponseEntity downFile(Long id) throws IOException{ System.out.println("开始下载文件了"); String filepath = "F:/aa.xlsx"; FileSystemResource fi
SpringBoot(三):文件下载
在原来的SpringBoot–uploadfile项目基础上添加文件下载的Controller: @RequestMapping(value = &amp;quot;/testDownload&amp;quot;, method = RequestMethod.GET) public void Download(HttpServletResponse res) { String fileName =
Vue调用SpringBoot后台实现文件下载功能
该案例实现前端Vue通过axios请求SpringBoot后台,实现文件下载功能。 filepack : 前端项目 8081端口。 fileServer: 后端项目 8080端口。
中文名的文件下载乱码难题
我写的asp.net下的一个下载程序,提供下载的文件有很多是中文名称,在论坛里也看了很多帖子,慢慢地也完成了,就是用windows自带的下载程序下载完全没有问题,但是只要用下载工具比如flashget、IDM等可以下载但文件名为乱码。我的代码如下:rnResponse.ContentType = "application/octet-stream";rnResponse.AddHeader("Content-Disposition", "attachment; filename="+filename);rn后一句的filename已经对传过来的中文参数进行了编码:rnfilename=HttpUtility.UrlEncode(filename,Encoding.UTF8);rn高人请帮忙!分数不够另开贴给!
s2文件下载乱码
页面和数据库的编码都是utf-8rn现在的问题是中文的路径名(文件名)文件可以下载,但是文件名显示为乱码。rnstruct.xml中的配置:rn[code=XML]rnrn rn reportrn 2048rn attachment;filename=$fileNamern rn /studownload.jsprn rn[/code]rnrn[img=http://hi.csdn.net/attachment/201005/9/4587900_1273385210K4D3.gif][/img]rn请问这是什么原因呢,咋解决?在网上查了许多,说的方法都没用..
struts2文件下载乱码
[b]一下是我页面下载链接和java类及配置文件,英文文件名迅雷和windows下载均正常,中文时迅雷得到的文件名是乱码,而且下载不了,用Windows右击目标另存为,报错63485 ERROR 2010-06-04 21:18:08304 rnorg.apache.struts2.dispatcher.StreamResult Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check the tag specified for this action,然后点击取消报错,[/b]rnrn$dis.fileNamernrnrnpackage com.office.struts;rnrnimport java.io.File;rnimport java.io.FileInputStream;rnimport java.io.FileNotFoundException;rnimport java.io.InputStream;rnimport java.io.UnsupportedEncodingException;rnimport java.net.URLDecoder;rnrnimport org.apache.struts2.ServletActionContext;rnrnimport com.juyan.struts2.httpservlet.SrrFactory;rnimport com.office.dao.FileTreeDao;rnimport com.opensymphony.xwork2.ActionSupport;rnrnpublic class DownLoadAction extends ActionSupport rnrn /**rn * 文件下载类rn */rn private static final long serialVersionUID = 1L;rnrn FileTreeDao fileTreeDao;rnrn String pt;rn rn public String getContentType() rn return contentType;rn rnrn public void setContentType(String contentType) rn this.contentType = contentType;rn rnrn public String getContentDisposition() rn return contentDisposition;rn rnrn public void setContentDisposition(String contentDisposition) rn this.contentDisposition = contentDisposition;rn rnrn private String contentType;rn private String contentDisposition;rnrn public FileTreeDao getFileTreeDao() rn return fileTreeDao;rn rnrn public void setFileTreeDao(FileTreeDao fileTreeDao) rn this.fileTreeDao = fileTreeDao;rn rnrn String fileName;rnrn public String getFileName() throws UnsupportedEncodingException rn fileName=new String(fileName.getBytes(),"ISO-8859-1"); rn return fileName;rn rnrn public void setFileName(String fileName) rn this.fileName = fileName;rn rnrn public InputStream getInputStream() rnrn rn File file = new File(pt);rn try rn InputStream inputStream=new FileInputStream(file);rn return inputStream;rn catch (FileNotFoundException e) rn e.printStackTrace();rn return null;rn rnrn rnrn public String execute() rn System.out.println(SrrFactory.getHttpServletRequestObject().getParameter(rn "fileName"));rn System.out.println(SrrFactory.getHttpServletRequestObject()rn .getParameter("filePath")rn + "\\"rn + SrrFactory.getHttpServletRequestObject().getParameter(rn "fileName"));rn this.pt = SrrFactory.getHttpServletRequestObject().getParameter(rn "filePath")rn + "\\"rn + SrrFactory.getHttpServletRequestObject().getParameter(rn "fileName");rn return "success";rn rnrnrnrnrnrnrnrnrnrn application/octet-stream;charset=ISO8859-1rn inputStreamrn attachment;filename="$fileName" rn 4096rnrnrnrn
文件下载和名称乱码
<h3>手动编码方式下载</h3><br /> <br /> <a href="/dowload/dowloadServlet?filename=12-Servlet.rar">12-Servlet.rar</a><br /> <br /> <a href="/dowload/dowloadServlet?filename=QQ图片20170919180713.jpg"
Struts2文件下载中文名乱码
Struts2中提供了快捷的下载方式,通过配置struts.xml文件即可实现文件的下载,但是功能实现后下载文件的文件名却出现乱码,或者直接来个***.action,让人很是无语,但很显然,这是中文乱码问题需要设置编码格式,道理都懂,但是怎样实现呢?其实很简单,上代码: application/octet-stream inputStreamxxx a
thinkphp3.2 文件下载乱码
1、汉字格式转化:$name = iconv('UTF-8','gbk',$fDown['name']);2.引用文件:import(&quot;Org.Net.Http&quot;);        $id = I('get.id', 0, 'intval');        $fDown = $this-&amp;gt;model-&amp;gt;where('id='.$id)-&amp;gt;find();        $name...
struts2_文件下载(乱码问题解决)
在下载过程中经常出现的问题就是关于下载文件所在路径及文件实体上,多家注意就能弥补   FileDownloadAction.java package hs.struts2.filedownload.action; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep...
文件下载出现乱码!
从Oracle BLOB字段中读出文件内容,类型是byte[],然后用JSP下载。文本文件中的内容全是乱码。该如何解决?将来BLOB字段中要存各种格式的文档,其它格式我还没有试过。rnrn代码如下:rn<%rn String id = request.getParameter("id");rn String filename = request.getParameter("filename");rn rn // 设置响应头和下载保存的文件名rn response.setContentType("APPLICATION/OCTET-STREAM");rn response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");rnrn ResultDetailElement rde = new ResultDetailElement();rn byte[] content = rde.getAttachContent(id); rnrn // 写出信息rn for( int i = 0; i < content.length; i++ )rn rn out.write(content[i]); rn rn out.close();rn%>
文件下载后是乱码!!!!!!!!!!!!!!!!!!
第一种情况:从数据库中提取数据,不使用jspsmartuploadrn<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" %>rn<%@ page import="OAWei.News" %>rn<%@ page import="java.io.*" %><%rn News news=new News();rn String sql="select * from test where autoid=143";rn ResultSet rs=null;rn PreparedStatement pstmt=news.con.prepareStatement(sql);rn rs=pstmt.executeQuery(sql);rn rs.next();rn rn java.io.InputStream is=rs.getBinaryStream("content");rn response.setContentType("application/x-msdownload;charset=GB2312");rn response.setHeader("Content-Disposition","attachment; filename=143.doc");rn java.io.OutputStream os=response.getOutputStream();rn int len=0;rn byte buffer[]=new byte[1024];rn while((len=is.read(buffer))!=-1)rn os.write(buffer,0,len);rn os.flush();rn rs.close();rn%>rn上传到数据库中的是doc文件rn第二种情况:从服务器的一个文件,使用jspsmartuploadrn<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*"%>rn<%@ page import="com.jspsmart.upload.*" %>rn<%@ page import="OAWei.News" %>rn<%rn com.jspsmart.upload.SmartUpload mysu=new com.jspsmart.upload.SmartUpload();rn mysu.initialize(pageContext); rn response.setContentType("application/x-msdownload;charset=GB2312"); rn mysu.setContentDisposition(null); rn mysu.downloadFile("/upload/web.doc");%>rn这两种情况都会有乱码,如果是txt文件不会有乱码.rn
文件下载,附件的中文名称乱码
我的程序中要自动生成文件下载,但下载以中文文件名会在下载确认窗体上显示乱码,英文文件名就不会,不知道如何解决,望高手指点。rnrnResponse.Clear();rnResponse.BufferOutput=true;rnResponse.Charset="utf-8";//用“GB2312”也不行rnResponse.AppendHeader("Content-Disposition","attachment;filename=测试.xls");rnResponse.ContentType = "application/vnd.ms-excel";rnFileInfo mf=new FileInfo(sFile);rnFileStream fs=mf.OpenRead();rnResponse.WriteFile(fs.Handle,0,mf.Length);rnfs.Close();rnrn另请教,我这里的文件是程序自动生成的,不存盘有没有办法能直接从内存中发送到客户端以附件下载??rn
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview