您好我正在尝试创建一个允许我托管任何类型文件的应用程序。 为了做到这一点,我正在执行以下魔术:
@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,但它看起来有点乱。
答案 0 :(得分:1)
与@RequestBody一样,Spring将返回的对象转换为 使用HttpMessageConverter
响应正文
我认为你的问题是Spring没有HttpMessageConverter,而不能处理FileSystemResource。
A list of builtin HttpMessageConverter is available here。我建议你尝试以某种方式将你的响应转换为字节数组,也许它会选择ByteArrayHttpMessageConverter来帮助解决你的问题
答案 1 :(得分:0)
我使用这样的代码返回图像
@RequestMapping(value = "/image/{id}", method = RequestMethod.GET)
public String getImage(... HttpServletResponse response) {
response.setContentType(image/png);
(response.getOutputStream()).write(imageByteArray);
}
我认为你必须定义适当的mime类型并将数据发送到响应。