再次回到与 ics 格式及其浏览器特定管理相关的另一个问题。
我写了一个服务器,如果你关心使用 Spring 3.2 生成的 RestFUL 服务器,它直接返回一个字符串给调用客户端(这里,对于客户端,我的意思是浏览器)。我的方法的签名就像
@RequestMapping(value="/path_and_params", method = RequestMethod.GET)
public ResponseEntity<String> myMethod (@PathVariable("first") long first, @PathVariable("second") String second)
在某处myMethod
我调整了响应
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "text/calendar; charset=utf-8");
headers.add("Content-Disposition", "inline;filename=calendar.ics");
所以最后我返回的是
return new ResponseEntity<String> ( icsAsString, headers, HttpStatus.CREATED );
我的愿望是让浏览器自动创建一个名为calendar.ics
from的文件String icsAsString
(请注意,icsAsString
使用iCal4J创建的因此在语法上是正确的)并选择正确的应用程序来处理这个文件。这种愿望来自我对Content-Disposition
标题的理解(https://www.rfc-editor.org/rfc/rfc2183)。这适用于 Firefox(至少适用于 Firefox 22)。但是,这不适用于 Chrome,其中文件只是在调用选项卡中显示为内容。此外,我找不到任何证据证明automatically create a file
这让我认为这是 Firefox 的一个功能,并且 IE 或其他浏览器也可能出现问题。
所以,总而言之,我的问题是:
- 我是否正确理解了
Content-Disposition
标题?它应该服务于告诉浏览器根据传入的响应正文内容创建文件的目的,还是这是 Firefox 特有的功能? - 如果我在服务器上创建一个文件然后传输该文件会更好吗?