当前位置: 首页 > 面试题库 >

JavaScript将数据URI转换为文件,然后追加到FormData

昝欣可
2023-03-14
问题内容

我一直在尝试重新实现HTML5图像上传程序,HTML5图像上传程序,但是它可以与WebKit浏览器一起使用。任务的一部分是从canvas对象中提取图像文件,并将其附加到FormData对象以进行上传。

问题在于,虽然canvas具有toDataURL返回图像文件表示形式的功能,但FormData对象仅接受FileAPI中的 File或Blob对象。

Mozilla解决方案在Firefox上使用了以下仅Firefox功能canvas

var file = canvas.mozGetAsFile("foo.png");

…在WebKit浏览器上不可用。我能想到的最好的解决方案是找到一种将Data URI转换为File对象的方法,我认为这可能是File
API的一部分,但是我一生都找不到能够做到这一点的方法。

可能吗?如果没有,还有其他选择吗?

谢谢。


问题答案:

在玩了几件事之后,我设法自己弄清楚了。

首先,这会将dataURI转换为Blob:

function dataURItoBlob(dataURI) {
    // convert base64/URLEncoded data component to raw binary data held in a string
    var byteString;
    if (dataURI.split(',')[0].indexOf('base64') >= 0)
        byteString = atob(dataURI.split(',')[1]);
    else
        byteString = unescape(dataURI.split(',')[1]);

    // separate out the mime component
    var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];

    // write the bytes of the string to a typed array
    var ia = new Uint8Array(byteString.length);
    for (var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
    }

    return new Blob([ia], {type:mimeString});
}

从那里,将数据附加到表单,以便将其作为文件上传很容易:

var dataURL = canvas.toDataURL('image/jpeg', 0.5);
var blob = dataURItoBlob(dataURL);
var fd = new FormData(document.forms[0]);
fd.append("canvasImage", blob);


 类似资料:
  • 问题内容: 我一直在尝试重新实现HTML5图像上传程序,例如MozillaHacks网站上的HTML5图像上传程序,但是它可以与WebKit浏览器一起使用。任务的一部分是从对象中提取图像文件,并将其附加到FormData对象以进行上传。 问题在于,虽然具有返回图像文件表示形式的功能,但FormData对象仅接受FileAPI中的 File或Blob对象。 Mozilla解决方案在Firefox上使

  • 我一直在尝试重新实现一个HTML5图像上传程序,就像Mozilla Hacks网站上的一样,但它适用于WebKit浏览器。部分任务是从对象中提取图像文件,并将其附加到FormData对象以供上传。 问题是,虽然具有函数来返回图像文件的表示形式,但FormData对象仅接受来自文件API的文件或Blob对象。 Mozilla解决方案在画布上使用了以下仅限Firefox的函数: ...这在WebKit

  • 因此,我有一个网络摄像头功能,可以将base64 URI返回给我,但我无法将其保存到AWS,因为它需要一个图像对象。有没有办法将URI转换成javascript对象?(文件对象与文件浏览器输入标记返回的相同) 我想把这个换成 这件事 可能吗?怎样提前谢谢。。

  • 本文向大家介绍使用JavaScript将图像转换为数据URI,包括了使用JavaScript将图像转换为数据URI的使用技巧和注意事项,需要的朋友参考一下 若要使用javascript将图像从HTML页面标签转换为数据URI,首先需要创建一个canvas元素,将其宽度和高度设置为与图像相同,在其上绘制图像,最后在其上调用toDataURL方法。 这将返回图像的base64编码数据URI。例如,如果

  • 标题说明了一切: null 编辑:工作示例要简单得多(多亏了@T.S.): 谢谢!

  • 我正在尝试访问配置单元表,并从表/数据帧中提取和转换某些列,然后将这些新列放入新的数据帧中。我试着用这种方式- 它使用SBT构建时没有任何错误。但当我尝试运行它时,我收到以下错误- 我想了解是什么导致了这个错误,如果有任何其他的方法来完成我正在尝试做的事情。