如何生成 blob url?

Posted

技术标签:

【中文标题】如何生成 blob url?【英文标题】:How can i generate a blob url? 【发布时间】:2018-10-01 18:30:29 【问题描述】:

我有一个函数可以确定 gif 是动画还是非动画。一切正常,直到我将这些 gif 上传到服务器并加载它,blob url 是一个空字符串。我怎样才能为此生成一个 blob url?

由于blob url是空字符串,我得到参数1不是'blob'类型

下面的函数确定 gif 是否为动画。

$scope.isNotAnimatedGIF = function(file) 
  var reader = new FileReader();
  return new Promise(function(resolve, reject) 
    reader.onload = function (e) 
      var gifInfo = gify.getInfo(reader.result);
      if (gifInfo.images.length <= 1) 
        file.animatedGIF = false;
        resolve(true);
       else 
        file.animatedGIF = true;
        resolve(false);
      
    
    reader.readAsArrayBuffer(file);
  );

我正在使用 Angular 1.4.10 谢谢!

【问题讨论】:

我不确定,但你试过reader.readAsDataURL(file); 吗?和function(e) $scope.$apply(function() $scope.path = e.target.result; // blob url ); 【参考方案1】:

试试这个reader.readAsDataURL(Blob|File)

您可以通过here找到更多信息

【讨论】:

谢谢!会试试看!【参考方案2】:

您可以使用URL.createObjectURL() 创建Blob url。

URL.createObjectURL() 静态方法创建一个DOMString,其中包含一个表示参数中给定对象的 URL。 URL 生存期与创建它的窗口中的document 相关联。新的对象 URL 表示指定的File 对象或Blob 对象。

演示

function createbloburl(file, type) 
  var blob = new Blob([file], 
    type: type || 'application/*'
  );

  file = window.URL.createObjectURL(blob);

  return file;

document.querySelector('#file').addEventListener('change', function(e) 
  var file = e.currentTarget.files[0];
  if (file) 
    file = createbloburl(file, file.type);
    document.querySelector('iframe').src = file;
    //console.log(file)
  
)
<input id="file" type="file">

<iframe src=""></iframe>

【讨论】:

谢谢,试试看! 我已经尝试了这两个建议,我发现,它不是导致问题的 blob url 丢失。问题是,从服务器加载文件后,它变成了对象类型而不是文件类型,我尝试将对象更改为文件类型,但文件大小与原始文件完全不同 从服务器端你得到 base64 或其他什么? 我从服务器获取整个对象类型,而不是文件类型。对于这个问题,我决定阻止用户保存动画GIF,这样我就可以避免这个问题。 你能提供你的整个对象吗?所以我可以尝试在blob中转换。为此*我决定阻止用户保存动画GIF,这样我就可以避免这个问题*你可以在img标签上使用accept属性。

以上是关于如何生成 blob url?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中生成 Azure blob SAS URL?

如何在 django 中将 blob url 转换为 mp3 音频

怎样将作品集转换成url格式

如何从 blob:url 获取原始图像数据?

如何从 javascript 中的 URL 获取 File() 或 Blob()?

如何使用 Blob URL、MediaSource 或其他方法播放连接的媒体片段 Blob?