使用ResponseBody下载spring文件
您好我正在尝试创建一个允许我托管任何类型文件的应用程序。 为了做到这一点,我正在执行以下魔术:
@RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET) @ResponseBody public FileSystemResource getFile( @PathVariable("file_name") String fileName) { System.out.println(fileName); String filePath = "./files/"; return new FileSystemResource(new File(filePath+fileName)); }
但这种方法带来了三个不必要的问题
-
一些随机数据被附加到文件中
-
该文件在浏览器窗口中打开而不是下载 – 我试图使用类似的东西来破解它
produce =“application / octet-stream”
但它只导致406错误。
-
test.txt被截断到测试中,我找到了一个解决方案,为应用程序提供test.txt /作为fileName,但它看起来有点乱。
如弹簧手册所述
与@RequestBody一样,Spring使用HttpMessageConverter将返回的对象转换为响应主体
我认为你的问题是Spring没有HttpMessageConverter,而不能处理FileSystemResource。
此处提供了内置HttpMessageConverter的列表 。 我建议你尝试将你的响应转换成字节数组,也许它会选择ByteArrayHttpMessageConverter来帮助解决你的问题
我使用这样的代码来返回图像
@RequestMapping(value = "/image/{id}", method = RequestMethod.GET) public String getImage(... HttpServletResponse response) { response.setContentType(image/png); (response.getOutputStream()).write(imageByteArray); }
我认为你必须定义适当的mime类型并将数据发送到响应。