您好,我正在尝试创建一个允许我托管任何类型文件的应用程序。
为了做到这一点,我正在执行以下魔术:
@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));
}
但是这种方法带来了三个不必要的问题:
一些随机数据被添加到文件中
该文件在浏览器窗口中打开,而不是发出蜂鸣声
下载-我试图使用类似的东西来破解
产生=“应用程序/八位字节流”
但这只会导致406错误。
test.txt被截断为test,我在为应用程序提供test.txt /作为fileName时发现了一种变通方法,但看起来有些混乱。
最佳答案
如spring manual所述
与@RequestBody一样,Spring将返回的对象转换为
通过使用HttpMessageConverter响应正文
我认为您的问题是spring没有配备可以处理FileSystemResource的HttpMessageConverter。
A list of builtin HttpMessageConverter is available here。我建议您尝试以某种方式将响应转换为字节数组,也许它将改用ByteArrayHttpMessageConverter并帮助解决您的问题