js 图片base64转file文件的两种方式

js 图片base64转file文件的两种方式nbsp nbsp nbsp nbsp 最近项目中需要实现把图片的 base64 编码转成 file 文件的功能 然后再上传至服务器 起初是直接通过 newFile 的方式进行转换 在各个主流的浏览器基本上都支持 Android 也没问题 但是在 ios 系统埋了个坑 ios11 4 以下的系统上传失败 定位 bug 发现是 newFile 这个方法不兼容 ios 系统 只能另辟蹊径 最后找到一个方法就是 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp

        最近项目中需要实现把图片的base64编码转成file文件的功能,然后再上传至服务器。起初是直接通过new File()的方式进行转换,在各个主流的浏览器基本上都支持,Android也没问题,但是在ios系统埋了个坑,ios11.4以下的系统上传失败。定位bug发现是new File()这个方法不兼容ios系统,只能另辟蹊径,最后找到一个方法就是:

                                        将base64转成blob ——> blob转成file

这种方式测试通过,解决了new File()不兼容ios系统问题。下面将base64转file文件两种方式的代码贴出来:

1.通过new File()将base64转换成file文件,此方式需考虑浏览器兼容问题。

 //将base64转换为文件 dataURLtoFile: function(dataurl, filename) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], filename, { type: mime }); }, //调用 var file = dataURLtoFile(base64Data, imgName);

2.先将base64转换成blob,再将blob转换成file文件,此方法不存在浏览器不兼容问题。

 //将base64转换为blob dataURLtoBlob: function(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], { type: mime }); }, //将blob转换为file blobToFile: function(theBlob, fileName){ theBlob.lastModifiedDate = new Date(); theBlob.name = fileName; return theBlob; }, //调用 var blob = dataURLtoBlob(base64Data); var file = blobToFile(blob, imgName); 

        目前方法二在项目中已经可以正常使用。

        本人前端小新,如有不正确的地方,欢迎各位大牛指正。

 

 

 

 

 

 

 

 

 

参考博客地址:https://blog.csdn.net/happyElina/article/details/?utm_source=blogxgwz1

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228872.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午6:00
下一篇 2026年3月16日 下午6:00


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号