2017-01-31 73 views
3

我們有一個Angular應用程序,它可以獲取一些輸入參數並將它們發送到後端進行處理。處理結果是一個我們想要在新選項卡中打開的pdf文件。BLOB URL的自定義名稱

這樣做的代碼類似於下面:

myService.getDocument(document) 
    .then(function(response) { 
    if (response.error) { 
     // Error handling goes here 
    } else { 
     var file = new BLob([response.data), {type: 'application/pdf'}); 
     var fileURL = URL.createObjectURL(file); 
     $window.open(fileURL, '_blank_'); 
    } 
    }); 

一切工作正常,但在瀏覽器的URL顯示如下一些隨機生成的字符串:

blob:http://localhost:3000/85cad96e-e44e-a1f9-db97a96ed3fe 

顯然,這看起來不是很對最終用戶很好,我們希望顯示對用戶有意義的內容,如下所示:

blob:ftp://localhost:3000/my_document_name_or_whatever 

我是新來的JS,新來Angular,HTML新手,希望我的問題聽起來不太天真。

非常感謝您的意見。

回答

7

簡短回答,您不能

這是一個地址,指向瀏覽器的內存,存儲blob的位置,或指向原始文件的指針,以防用戶通過input type = file上傳文件。

這是以某種方式設計。您可以從同一個Blob創建多個blobURL。如果他們要使用一個文件名作爲URI,那麼你不能。

從理論上講,您應該可以動態創建一個重定向到BlobURI的頁面,並且您可以將它命名爲這個重定向頁面。但這只是理論,我從來沒有試圖自己去做。

概念的一個粗略的證明可以在this plunker可以看出,很明顯,你需要生成blobRename.html動態,並更名爲你想要的,也迫使它的內容頭,以便瀏覽器認爲這是一個HTML頁面,如果你想擺脫.html。 另外請注意,它似乎沒有與PDF文件,它需要瀏覽器插件觸發,但與一些更多的工作,它可能可能破解的東西。

但無論如何,我只是讓隨機的網址,你的用戶會越來越習慣它,因爲越來越多的網絡應用程序使用這個偉大的API。