2

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

@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. 该文件在浏览器窗口中打开而不是下载 - 我试图使用类似的东西来破解它

    产生=“应用程序/八位字节流”

    但它只导致406错误。

  3. test.txt 被截断为测试,我找到了一个解决方法,为应用程序提供 test.txt/ 作为文件名,但它看起来有点乱。

4

2 回答 2

1

弹簧手册所述

与@RequestBody 一样,Spring 使用 HttpMessageConverter 将返回的对象转换为响应正文

我认为您的问题是 spring 没有附带 HttpMessageConverter 而不是可以处理 FileSystemResource。

此处提供了内置 HttpMessageConverter 的列表。我建议您尝试以某种方式将您的响应转换为字节数组,也许它会选择 ByteArrayHttpMessageConverter 并帮助解决您的问题

于 2013-01-23T00:18:18.040 回答
0

我使用这样的代码返回图像

@RequestMapping(value = "/image/{id}", method = RequestMethod.GET)
public String getImage(... HttpServletResponse response) {
      response.setContentType(image/png);
      (response.getOutputStream()).write(imageByteArray);
}

我认为您必须定义正确的 mime 类型并将数据发送到响应。

于 2013-01-23T06:51:52.300 回答