如何在javascript中将dataURL转换为文件对象?
我需要将 dataURL 转换为 Javascript 中的 File 对象,以便使用 AJAX 发送它。是否可以?如果是,请告诉我怎么做。
I need to convert a dataURL to a File object in Javascript in order to send it over using AJAX. Is it possible? If yes, please tell me how.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如果您需要通过ajax发送它,则不需要使用
File
对象,只需要Blob
和FormData
对象。正如我旁注的那样,为什么不直接通过 ajax 将 base64 字符串发送到服务器并将其转换为二进制服务器端,例如使用 PHP 的
base64_decode
?无论如何,这个答案中的符合标准的代码适用于 Chrome 13 和 WebKit nightlies:然后只需将 blob 附加到新的 FormData 对象并使用 ajax 将其发布到服务器:
If you need to send it over ajax, then there's no need to use a
File
object, onlyBlob
andFormData
objects are needed.As I sidenote, why don't you just send the base64 string to the server over ajax and convert it to binary server-side, using PHP's
base64_decode
for example? Anyway, the standard-compliant code from this answer works in Chrome 13 and WebKit nightlies:Then just append the blob to a new FormData object and post it to your server using ajax:
BlobBuilder 已弃用,不应再使用。使用 Blob 而不是旧的 BlobBuilder。代码非常干净和简单。
文件对象继承自Blob对象。您可以将它们与 FormData 对象一起使用。
使用 dataURLtoBlob() 函数将 dataURL 转换为 blob 并将 ajax 发送到服务器。
例如:
另一种方式:
您还可以使用fetch 将 url 转换为文件对象(文件对象有 name/fileName 属性,这与 blob 对象不同)
代码非常短且易于使用。
(适用于 Chrome 和 Firefox)
使用示例 1:仅转换为文件对象
使用示例 2:转换为文件对象并上传到服务器
The BlobBuilder is deprecated and should no longer be used. Use Blob instead of old BlobBuilder. The code is very clean and simple.
File object is inherit from Blob object. You can use both of them with FormData object.
use dataURLtoBlob() function to convert dataURL to blob and send ajax to server.
for example:
Another way:
You can also use fetch to convert an url to a file object (file object has name/fileName property, this is different from blob object)
The code is very short and easy to use.
(works in Chrome and Firefox)
Usage example 1: Just convert to file object
Usage example 2: Convert to file object and upload to server
要从 dataURL 创建 Blob:
要从 Blob 创建文件:
To create a blob from a dataURL:
To create a file from a blob:
如果您确实想将 dataURL 转换为
File
对象。您需要将 dataURL 转换为
Blob
,然后将Blob
转换为File
。该功能来自马修的回答。 (https://stackoverflow.com/a/7261048/13647044)
除此之外,您还可以在 < code>File 对象已初始化。 参考 File() 构造函数。
类型应为
[MIME][1]
类型(即image/jpeg
),我的示例中的最后修改值相当于Mon Aug 10 2020 19: 37:31 GMT+0200(东欧标准时间)
If you really want to convert the dataURL into
File
object.You need to convert the dataURL into
Blob
then convert theBlob
intoFile
.The function is from answer by Matthew. (https://stackoverflow.com/a/7261048/13647044)
Other than that, you can have options on the
File
Object initialised. Reference to File() constructor.The type should be
[MIME][1]
type(i.e.image/jpeg
) and last modified value in my example is equivalent toMon Aug 10 2020 19:37:31 GMT+0200 (Eastern European Standard Time)
在最新的浏览器中:
In Latest browsers:
经过一番研究后,我得出了这个结论:
After some research I arrived on this one: