【问题标题】:Converting a Blob object into a File, for Ms Edge将 Blob 对象转换为文件,用于 Ms Edge
【发布时间】:2020-03-20 14:01:55
【问题描述】:

我有一个 Blob 对象,它是一个图像,我正在尝试转换为文件对象,但它在 MS edge 版本 41 中显示错误。我在第一次两次尝试中使用 formdata

尝试 1

fd.set('file', blobObj, fileName);
return (fd.get('file'));

这导致了一个错误

对象不支持这个属性或方法'set'

尝试 2

我用 append 替换了 set,然后我得到了这个

对象不支持这个属性或方法'get'

尝试 3

我用一个看起来像这样的新逻辑完全替换了 formdata

  let fileObject = new File([u8arr], fileName, { type: mime });

我收到一个错误提示

对象不支持此操作

还有其他方法可以使用吗?可以直接使用blob作为文件吗?

【问题讨论】:

  • 在我有限的测试中,Edge 上的new FormData() 确实支持.set.append.get 方法。
  • @TKol 它支持新的 44 版本,在 41 和 42 版本中它给了我错误
  • 你为什么还要get呢?您是否尝试过将 formData 提交到 post 端点?
  • 这能回答你的问题吗? How to convert Blob to File in JavaScript
  • @TKol 将 formData 直接发送到服务器也会使其作为 formdata 接收,而不是作为文件接收

标签: javascript file multipartform-data microsoft-edge form-data


【解决方案1】:

AFAIK,您的第三种方法似乎有效,

尝试一次,将 mime 类型硬编码为 "image/jpeg" / "image/png" 并包含修改的日期,然后验证一次

var fileInstance  = new File([blob], "FileName",{type:"image/jpeg", lastModified:new Date()})

如果你在 javascript 中显示它,你应该使用这样的东西:

var URL = window.URL || window.webkitURL;
var url_instance = URL.createObjectURL(blob);
var image_source = new Image();
image_source.src = url_instance;
document.body.appendChild(image_source); 

【讨论】:

  • 在 41,42 版本的 MS edge 中不支持文件构造函数
【解决方案2】:

File 对象是一种特定类型的 Blob,它只是缺少两个属性:lastModifiedDate 和 name(文件名属性)。

因此,您可以使用以下代码将 blob 对象转换为文件对象:

    var blobtoFile = function blobToFile(theBlob, fileName) {
        //A Blob() is almost a File() - it's just missing the two properties below which we will add
        theBlob.lastModifiedDate = new Date();
        theBlob.name = fileName;
        return theBlob;
    }

    var file = blobtoFile(blob, "test.png");

有关使用上述代码的更多详细信息,请查看sample

另外,请查看FormData Method Browser compatibility,从中我们可以看到大多数方法都支持Microsoft Edge 44+(EdgeHTML 18+,更多详细信息,请查看this article)。

所以,如果你想使用 FormData set 或 get 方法,请尝试升级 Windows 版本(Microsoft Edge 是操作系统的一部分,不能单独更新。它通过 Windows Update 接收更新,和其他的一样操作系统。)。否则,您可以使用 JavaScript 对象来存储 blob 或文件对象。

详细更新步骤如下:选择开始 > 设置 > 更新和安全 > Windows Update,然后选择检查更新并安装任何可用的更新。

【讨论】:

  • 浏览器将其作为文件读取,但我必须将其发送到服务器进行进一步处理。当我将它发送到服务器时,它将它作为一个 blob 读取。我尝试将 _proto 更改为 File 的原型,但效果不佳。
猜你喜欢
  • 2020-04-15
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2015-02-17
  • 2015-03-29
  • 2020-04-22
  • 1970-01-01
相关资源
最近更新 更多