ICalendar使用文本/日历mime类型传输

时间:2013-07-16 16:22:53

标签: google-chrome firefox spring-mvc icalendar


再回来一个与ics格式及其浏览器特定管理相关的问题 我写了一个服务器,如果你关心用Spring 3.2生成的RestFUL服务器,它会直接将一个String返回给调用客户端(这里,对于客户端,我指的是一个浏览器)。我方法的签名就像

@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自动创建名为String icsAsString的文件(请注意icsAsString是使用iCal4J创建的,因此在语法上是正确的)并选择正确的应用程序来处理这个文件。这种愿望源于我对Content-Disposition标题(http://tools.ietf.org/html/rfc2183)的理解。这适用于Firefox(至少使用Firefox 22)。但是,这不适用于Chrome,其中文件只是显示为调用标签内的内容。此外,我无法找到任何关于automatically create a file的证据,这使我认为这是Firefox的一个功能,并且IE或其他浏览器也可能出现问题。
总而言之,我的问题是:

  1. 我是否正确理解了Content-Disposition标题?它是否应该用于告诉浏览器根据传入的响应主体内容创建文件,还是这个特定于Firefox的功能?
  2. 如果我在服务器上创建一个文件然后传输该文件会不会更好?

1 个答案:

答案 0 :(得分:0)

显然我忘了/误解了http status codes的行为。在我的代码中,我将响应代码设置为201而不是200。可能FF比其他浏览器更少关注状态代码。事实上,代码201上的定义陈述了

  

响应应该包含一个实体,其中包含资源特征和位置列表,用户或用户代理可以从中选择最合适的一个

  

原始服务器必须在返回201状态代码之前创建资源

虽然我没有在服务器上创建文件。现在一切都像我期待的那样有效!