2015-10-19 73 views
0

因此,我的應用程序的所有上傳內容都不存儲在我的Web服務器空間中,它們存儲在文件系統存儲中。當我的用戶想要訪問文件時,他們會調用一個URL,後端進程會通過HttpServletResponse outputstream將數據緩衝到瀏覽器。這可以很好地用於下載文件。現在我的用例有一個場景,我需要使用相同的方法加載嵌入的對象。來自動態來源的HTML對象數據網址

我基本上是在瀏覽器中加載PDF文件的預覽。如果PDF存儲在Web服務器上,並且提供文件的直接URL,這可以正常工作。但是,當我使用我的方法發送文件給用戶時,它不起作用。

<object data='"+pdfUrl+"' type='application/pdf' width='160px' height='160px' /> 

如果我把pdfURL到瀏覽器我的文件被下載了沒有問題。所以我認爲問題是我在輸出流中發送的HTTP頭可能阻止了對象正確加載。我不知道,也許它的具體期待着什麼,以便觸發我目前使用非常基本的標題如下加載文件

設置:

BufferedInputStream is = <Some File Inputstream>; 
resp.setContentType(new MimetypesFileTypeMap().getContentType(directory+filename)); 
resp.setHeader("Content-Disposition", "attachment; filename="+StringFormatHelper.formatFileName(filename)); 
bufferedCopy(is, resp.getOutputStream()); 
is.close(); 
resp.getOutputStream().flush(); 

任何人有我有什麼想法更改以使數據正確加載到Object標記中?我沒有在JS控制檯或服務器端發生任何錯誤。我不知道如何調試這個問題。

編輯: 因此,我剛剛意識到,如果我右鍵點擊空白對象標籤在哪裏,我可以選擇「另存爲...」,當我做我下載PDF。所以PDF數據加載,但它只是不顯示在用戶界面。

回答

0

的問題是這行代碼

resp.setContentType(new MimetypesFileTypeMap().getContentType(directory+filename)); 

,因爲我認爲這是這是沒有設置正確的MIME類型的文件。因此,Object標記正在尋找application/pdf,但服務器在標頭中發送了不同的MIME類型。一旦我匹配他們的一切工作。

我可以使用Spring提供的查詢,以獲得正確的MIME類型,而不是JDK查找

new ConfigurableMimeFileTypeMap().getContentType(directory+filename)