小程序
小游戏
企业微信
微信支付
扫描小程序码分享
wx.chooseImage 获取本地图片,返回的是一个缓存地址,如何转换成file文件流,我试过只能转成base64,自己写代码 base64 转File会报错,是不是对 File 对象有限制?
3 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
我也遇到这个问题,有解决方案吗
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
问题解决了吗,遇到同样的问题
如果转成base64 能正常显示的话,那就是你自己写的base64转file的代码问题
谢谢回复,base64转file代码是没问题了,至少在H5上是正常使用,但是在微信小程序上,对于转码的最后一步,new File() 会报错,我觉得可能是小程序对这个关键字又有限制
用什么语言写的?如果是PHP的话,可以帮你看下。
谢谢你,我的是前端js,下面是转码的代码,最后一行会报错
dataURLtoFile = (dataurl, filename = 'image.jpg') => { //将base64转换为文件
var arr = dataurl.split(',')[1] || dataurl.split(',')[0], mime = 'data:image/jpeg;base64,'.match(/:(.*?);/)[1],
bstr = atob(arr), n = bstr.length, u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: 'dase64' });
};
new file 报错的话,应该是 你加载的东西没加载正确,导致这个调用失败吧
要用接口写,writefile,
//将base64图片转化为本地用户路径,使用完后需要删除
function savebase64Img(base64str,callback){
console.log(base64str);
if (base64str.indexOf('base64,')!=-1){
let startIdx = 0;
startIdx = base64str.indexOf('base64,') + 7;
base64str=base64str.slice(startIdx);
const fsm = wx.getFileSystemManager();
const FILE_BASE_NAME = 'tmp_base64src';
const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.jpg`;
fsm.writeFile({
filePath,
data: base64str,
encoding: 'base64',
success(){
console.log(filePath);
callback(filePath);
},
fail(err) {
console.log(err);
return (new Error('ERROR_BASE64SRC_WRITE'));
callback('');
})
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
我也遇到这个问题,有解决方案吗
问题解决了吗,遇到同样的问题
如果转成base64 能正常显示的话,那就是你自己写的base64转file的代码问题
谢谢回复,base64转file代码是没问题了,至少在H5上是正常使用,但是在微信小程序上,对于转码的最后一步,new File() 会报错,我觉得可能是小程序对这个关键字又有限制
用什么语言写的?如果是PHP的话,可以帮你看下。
谢谢你,我的是前端js,下面是转码的代码,最后一行会报错
dataURLtoFile = (dataurl, filename = 'image.jpg') => { //将base64转换为文件
var arr = dataurl.split(',')[1] || dataurl.split(',')[0], mime = 'data:image/jpeg;base64,'.match(/:(.*?);/)[1],
bstr = atob(arr), n = bstr.length, u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: 'dase64' });
};
new file 报错的话,应该是 你加载的东西没加载正确,导致这个调用失败吧
要用接口写,writefile,
//将base64图片转化为本地用户路径,使用完后需要删除
function savebase64Img(base64str,callback){
console.log(base64str);
if (base64str.indexOf('base64,')!=-1){
let startIdx = 0;
startIdx = base64str.indexOf('base64,') + 7;
base64str=base64str.slice(startIdx);
}
const fsm = wx.getFileSystemManager();
const FILE_BASE_NAME = 'tmp_base64src';
const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.jpg`;
fsm.writeFile({
filePath,
data: base64str,
encoding: 'base64',
success(){
console.log(filePath);
callback(filePath);
},
fail(err) {
console.log(err);
return (new Error('ERROR_BASE64SRC_WRITE'));
callback('');
}
})
}