undertow下renderFile无法返回正确的contentType

1、场景:
  使用wx.download()下载excel文件,下载后.xls后缀自动被改为.bin。浏览器访问正常下载。
2、原因
  追踪发现,服务端使用renderFile(new File("test.xls"))渲染后contentType还是默认的application/octet-stream,不是期望的application/ms-excel,
  FileRender:
105 String contentType = servletContext.getMimeType(file.getName());
106 response.setContentType(contentType != null ? contentType : DEFAULT_CONTENT_TYPE);

105行 没有获取到contentType,所以使用了默认 DEFAULT_CONTENT_TYPE

  当前部署使用jfinal-undertow,在tomcat下测试微信和浏览器均正常无此问题,只好重写renderFile解决。
  
  还有没有其它解决方法?


评论区

JFinal

2020-04-19 11:06

renderFile( "test.xls", "test.xls");

小胖

2020-04-19 11:18

@JFinal
还是application/octet-stream

小胖

2020-04-25 12:12

经查io.undertow.util.MimeMappings默认没有xls的MimeType,tomcat的web.xml有此默认配置,解决办法:
UndertowServer.create()
.configWeb(builder->{
MimeMapping xlsMimeMapping = new MimeMapping("xls","application/vnd.ms-excel");
builder.getDeploymentInfo().addMimeMapping(xlsMimeMapping);
})
.start()

JFinal

2020-04-25 12:24

@小胖 这个解决办法好,已收藏 + 点赞

JFinal

2020-04-25 12:28

@小胖 已决定将该功能添加到 jfinal undertow 2.1 中去:
https://gitee.com/jfinal/jfinal-undertow/issues/I1FIBH

海哥

2020-04-25 15:48

undertow 下的静态 mp4 等文件视频无法播放应该是同一个问题

热门反馈

扫码入社