2016-04-29 54 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

相关问题