您好,我正在尝试创建一个允许我托管任何类型文件的应用程序。
为了做到这一点,我正在执行以下魔术:

@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并帮助解决您的问题

09-07 14:36