2015-03-02 86 views
0

我正在使用一個servlet並將http響應與byte[]流傳遞給瀏覽器。我在我的java代碼中設置了response.setContentType("application/pdf");,但它仍然顯示垃圾代碼,如:JVBERi0xLjQKJeLjz9MKNCAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JTcGFjZS9EZXZpY2VSR0IvU3VidHlwZS9JbWFnZS9CaXR如何在瀏覽器中顯示來自byte []流的pdf?

我該怎麼做才能正確查看PDF到瀏覽器中?

+0

[在新的瀏覽器窗口中顯示的響應PDF字節流(可能重複http://stackoverflow.com/questions/25762363/showing-pdf-bytestream在新瀏覽器窗口中的響應) – GregD 2015-03-02 13:33:28

+0

您收到的「垃圾」看起來像base64編碼的PDF標頭。 – 2015-03-02 13:34:36

+1

建議的重複似乎是內容類型標題的問題,但是這看起來更像是base64編碼問題,而contentType部分實際上是正確處理的,正如OP所建議的。 – GPI 2015-03-02 13:38:14

回答

1

PDF文檔很容易被識別,因爲它們的第一個字符是%PDF,後面跟着一個版本號。

您可以在此處看到顯示的內容不遵循該規則,因此不是PDF。不過,這個字符串看起來很像基地64編碼的內容,而事實上,如果你嘗試一個base64解碼器,你會看到解碼輸出打印與啓動DOC:

%PDF-1.4 
... some binary stuff 

因此,什麼似乎缺少的是內容的解碼,然後通過響應發送。 爲了執行這種解碼,Apache Commons Codec具有Base64編碼和解碼的靈活實現,但您也可以使用各種類和utils來完成這項工作。查看該SO線程的答案:

Decode Base64 data in Java

相關問題