2016-04-29 18 views
0

我有一個用ng-file-upload上傳圖片的用例,服務器現在處於生成縮略圖的過程中,並且根據請求返回文件的base64字符串(縮略圖,像2K那樣非常小)。使用ng-file-upload從服務器使用blob數據?

這工作得很好;不過,我還希望能夠在ng-file-upload等其他用途(如ngf-src或ngf-background)中使用該blob。但我不確定究竟如何。

我目前使用這個請求併產生斑點(控制器縮短爲簡潔起見):

$http({ 
    url: appconfig.serviceUrl + ":" + appconfig.port + "/api/file/" + fileName, 
    method: 'GET', 
    cache: true, 
    headers: { 'Content-Type': 'application/json' } 
}).then(function (response) { 
    var apiURL = (window.createObjectURL && window) || (window.URL && URL.revokeObjectURL && URL) || (window.webkitURL && webkitURL); 
    var blob = new Blob([response.data], { type: 'image/jpg' }); 
    blob.src = response.data; 
    blob.url = apiURL.createObjectURL(blob); 
    deferred.resolve(blob); 
}, function (error) { 
    deferred.reject(error); 
})); 

在我的HTML的諧音,我可以使用以下方法來輕鬆展現團塊在任何瀏覽器(其中controlleras是「VM」和BLOB最終進入vm.img的範圍):

<img ng-src="data:image/jpg;base64,{{vm.img.src}}" type="image/jpg" width="320" height="180"/> 

我知道這可能不是一個blob正確的格式,我只是學習使用它們。

我試圖做類似如下:

var file = new File([blob], fileName, { type: 'image/jpg' });

雖然Chrome和Firefox似乎能夠生成文件確定,IE11將拋出一個「類型錯誤:對象不支持此操作」 ...

現在我該如何創建一個'文件'用於ng-file-upload的ng-models來使用和使用?

在另一個說明中,起初我只能從服務器根據請求發送文件作爲流。但是,它是一個具有exif數據的本地文件(字節數組?)。我可以「而不是」弄清楚使用與NG-文件上傳要麼:(

回答

1

你可以只是有一個字符串ngf-srcngf-background所以沒有必要轉換dataurl到BLOB。 你可以擁有的東西像這樣:

ngf-src="fileBlob || fileDataUrlString" 

這是一般更好地保持由瀏覽器選擇分開,因爲你真的不能設置文件輸入的編程,因爲瀏覽器的安全關切的值的URL字符串和實際的BLOB文件。

+0

我已經改變了我如何處理blob,現在生成服務器..發回它。 PNG轉換正在殺死瀏覽器,所以我正在以另一種方式處理這個問題。 儘管如此,我希望能夠從服務器獲取blob,併爲ng-file-upload及其指令(如ngThumbnail)使用'文件'。我想我很接近於搞清楚,但不適合IE ......它似乎不喜歡新的File(); – razblack

+0

正如我所說的,你不需要ngf-thumbnail的實際blob。你可以傳遞網址或字符串。 – danial

+0

但是,如果你真的堅持你可以使用內置的服務'Upload.urlToBlob()'閱讀文檔。 – danial

相關問題