从浏览器打开带有Outlook的.ics文件

时间:2012-04-18 15:15:17

标签: java jsp outlook icalendar ical4j

我正在开发一个导出日历的应用程序。我遇到的问题是下载日历而不是使用Outlook打开日历。这是我的代码:

1)主页面中有一个图像链接用于导出日历:

<img src="/calendar.png" width="32" Style="width: 32px; height:32px;" title="Calendar" onClick="javascript:document.getElementById('exportCal').submit();">

<form id="exportCal" action="Calendar.jsp" target="_blank" method="post">
    <INPUT TYPE="hidden" ID="calendarData" NAME="calendarData" VALUE=""/>
</form>

2)在链接重定向到的jsp中,我生成.ics(使用iCal4j库)文件并将其附加到响应:

response.setHeader ("Content-Disposition", "inline;filename=\"mycalendar.ics\"");
response.setContentType("text/calendar");

Calendar calendar = new Calendar();
calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));
calendar.getProperties().add(Version.VERSION_2_0);
calendar.getProperties().add(CalScale.GREGORIAN);

java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(java.util.Calendar.MONTH, java.util.Calendar.DECEMBER);
cal.set(java.util.Calendar.DAY_OF_MONTH, 25);

// initialise as an all-day event..
VEvent christmas = new VEvent(new Date(cal.getTime()), "Christmas Day");

// Generate a UID for the event..
UidGenerator ug = new UidGenerator("1");
christmas.getProperties().add(ug.generateUid());

calendar.getComponents().add(christmas);
System.out.println(calendar);

ServletOutputStream fout = response.getOutputStream();

CalendarOutputter outputter = new CalendarOutputter();
outputter.output(calendar, fout);

fout.flush();

然后,下载.ics。但我真正想做的是用Outlook打开它。有没有办法做到这一点?

提前致谢!!

1 个答案:

答案 0 :(得分:1)

这似乎是特定于浏览器的行为。避免自动下载( in chrome )的唯一方法是使用 webcal 协议as suggested in this SO post。 Webcal通常仅用于动态日历订阅 - 而不是静态日历项。如果您在下载后打开ICS - 它应该在Outlook中打开。

<p>A <a href="webcal://mycalendar.ics">webcal ics link</a></p>