2011-05-18 92 views
1

如何將PDF文件與其他數據一起下載到同一HTTP請求中的Servlet中? 例如,我在我的服務器中有一個PDF文件,我想用該PDF文件和其他數據(如mynamemyage等)對同一請求作出響應。它可以在同一個請求上完成嗎?下載帶有來自Servlet的附加數據的PDF文件

+0

到底是什麼,「其他數據」的宗旨的頭?什麼是功能要求?你想從點擊下載鏈接的地方刷新當前的JSP嗎?或者你想將這些數據嵌入PDF文件本身? – BalusC 2011-05-18 21:32:30

+1

@BalusC nope我正在下載pdf文件到我的iphone與描述該文件的pdf文件內容 我需要他們在同一個請求,文件及其說明 – farajnew 2011-05-18 21:40:37

+0

所以,「其他數據」只是文件名它應該出現在*另存爲*對話框中 – BalusC 2011-05-18 21:45:00

回答

2

Java Servlet API不提供任何多部分響應的內置機制(這是您正在查找的功能的名稱)。 Servlet API的文檔暗示了這是如何實現的,在ServletResponse API doc

要在MIME體 響應發送二進制數據,請使用的getOutputStream返回的ServletOutputStream的 ()。要發送 字符數據,請使用getWriter()返回的PrintWriter 對象。要將 二進制和文本數據(例如 )混合起來,請創建多部分響應,使用 ServletOutputStream並手動管理 字符部分。

通過將響應的內容類型(MIME類型)設置爲「multipart/x-mixed-replace; boundary = xyz」來創建多部分響應。值xyz是任意的,用於描述響應的幾個部分。可以在書籍"Java Servlet Programming" by Jason Hunter以及KickJava site(請在您的項目中使用該許可證之前閱讀許可證)中找到Multipart Response類的實現。

+0

我可以在JSON對象中存儲我的[]字節的pdf對象,並使用getWriter()返回響應;我的意思是: out = response.getPrintWriter(); JSONObject obj = new JSONObject(); obj.put(「name」,「farajnew」); obj.put(「pdffile」,fileinbytes); out.print(obj); //我知道這不起作用,但我不能使用這樣的技術? – farajnew 2011-05-18 21:37:17

+0

@farajnew,我上次檢查時,任何PDF文件都會包含非文本信息,它包含二進制信息(字體,圖像等);我看不出如何將它存儲在JSON對象中,除非將它編碼爲文本表示。 – 2011-05-18 21:40:39

+0

@Vineet Reynolds 我看到了這個,但我使用了不同的庫, http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/JSONSerializer.html#toJSON(java.lang.Object) 可以工作嗎? – farajnew 2011-05-18 21:43:42

0

如果其他數據只是文字,也許你可以把它包括它作爲響應

+0

我可以在標題中放置一個小JSON對象嗎? 它最多隻包含4個鍵? – farajnew 2011-05-18 21:50:17

+0

您可以放4個標題,名稱前面加上X-,因爲維基百科認爲它是常規的:[List_of_HTTP_header_fields](http://en.wikipedia.org/wiki/List_of_HTTP_header_fields)(通用非標準標題) – AdrianRM 2011-05-19 17:41:55

+0

順便說一下:似乎有人已經想過把JSON編碼的數據放在標題中:http://deadlytechnology.com/scripts/return-json-array-using-ajax-and-prototype/ – AdrianRM 2011-05-19 17:45:52