java - 使用 ResponseBody 下载 spring 文件

标签 java 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. 文件在浏览器窗口中打开而不是蜂鸣 下载 - 我试过用类似

    的东西来破解它

    produces = "application/octet-stream"

    但这只会导致 406 错误。

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

最佳答案

spring manual 所述

As with @RequestBody, Spring converts the returned object to a response body by using an HttpMessageConverter

我认为你的问题是 spring 没有提供可以处理 FileSystemResource 的 HttpMessageConverter。

A list of builtin HttpMessageConverter is available here .我建议您尝试以某种方式将您的响应转换为字节数组,也许它会选择 ByteArrayHttpMessageConverter 来帮助解决您的问题

关于java - 使用 ResponseBody 下载 spring 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14470270/

相关文章:

java - Android:保持通知处于 Activity 状态

java - Tomcat的 "Catalina service"和 "Servlet Engine"之间的区别

java - Zuul路由优先级高于Spring Controller

java - 无法传递以# 开头的参数?

java - Maven javadoc :javadoc works but javadoc:aggregate throws errors that look like compiler errors

java - spring security - 动态更改注销成功url

java - 跟踪调用另一个类时使用变量的位置

Java 7 和 Tomcat 7.0.64 - ClassFormatException : Invalid byte tag in constant pool

java - 没有 SpringJUnit4ClassRunner 或 AbstractJUnit4SpringContextTests 的 Spring 测试上下文设置(在 Selenium 测试中)

java - 如何在Spring中发布对象列表?