簡體   English   中英

來自動態源的HTML對象數據URL

[英]HTML Object data URL from dynamic source

因此,我的應用程序的所有上載都不存儲在我的Web服務器空間中,而是存儲在文件系統存儲中。 當我的用戶想要訪問文件時,他們將調用URL,后端進程將通過HttpServletResponse輸出流將數據緩沖到瀏覽器中。 這非常適合下載文件。 現在,我的用例具有需要使用相同方法加載嵌入式對象的場景。

我實質上是在瀏覽器中加載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控制台或服務器端沒有任何錯誤。 我不確定如何調試此問題。

編輯:所以我才意識到,如果我右鍵單擊空白的Object標簽所在的位置,我可以選擇“另存為...”,然后下載PDF。 因此,將加載pdf數據,但不會在UI中顯示。

問題是這行代碼

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

這不是我認為的那樣為文件設置了正確的mime類型。 因此存在一個不匹配,因為Object標記正在尋找application/pdf但是服務器在標頭中發送了另一個MIME類型。 一旦我將它們匹配起來,一切都會起作用。

我能夠使用Spring提供的查找而不是JDK查找來獲取正確的MIME類型

new ConfigurableMimeFileTypeMap().getContentType(directory+filename)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM