使用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)); } 

但这种方法带来了三个不必要的问题

  1. 一些随机数据被附加到文件中

  2. 该文件在浏览器窗口中打开而不是下载 – 我试图使用类似的东西来破解它

    produce =“application / octet-stream”

    但它只导致406错误。

  3. 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类型并将数据发送到响应。