2012-04-18 251 views
1

我正在開發導出日曆的應用程序。我的問題是日曆下載而不是用Outlook打開。這裏是我的代碼:從瀏覽器中打開.ics文件

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

這似乎是一個瀏覽器特定的行爲。避免自動下載的唯一方法是使用webcal協議as suggested in this SO post(鉻合金中的)。 Webcal通常僅用於動態日曆訂閱 - 不是靜態日曆項目。如果您在下載後打開ICS - 它應該在Outlook中打開。

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

我知道webcal協議,但我認爲它只適用於靜態文件。因爲爲了放置這樣的鏈接,您應該先創建(並存儲)該文件,然後鏈接到該文件。因此,每次打開包含鏈接的頁面時,都會生成新的日曆文件(每個用戶都不相同),可能會或可能不會下載。另外,我已經嘗試過這種解決方案,但我不知道如何將文件保存在服務器中,以便以後可以下載。如果我錯了,請糾正我,並指出我正確的方向,因爲我是一個jsp新手。非常感謝!! – Neets 2012-04-19 05:39:54