H5中使用了node.js的图片上传功能,是用react写的,在Pc、安卓上均可正常上传,但部分ios机型无法上传,也没有报错,就是一直不响应结果一直转圈。代码如下:
Toast.loading('正在上传图片...',0);
let OSS = require('ali-oss');
let client = new OSS({
region: 'oss-cn-shenzhen',
//云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,部署在服务端使用RAM子账号或STS,部署在客户端使用STS。
accessKeyId: '*****',
accessKeySecret: '******',
bucket: '*****',
secure:true,
});
function dataURLtoFile(dataurl, filename) {
let 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});
}
let file ;
let file2 ;
var names = `cert_font_${this.props.match.params.cus_name}_${this.props.match.params.cert_code}.png`;
file = dataURLtoFile(this.state.certImag_font[0].url, names);
var names2 = `cert_back_${this.props.match.params.cus_name}_${this.props.match.params.cert_code}.png`;
file2 = dataURLtoFile(this.state.certImag_back[0].url, `cert_back_${this.props.match.params.cus_name}_${this.props.match.params.cert_code}.png`);
const success = (result) => {
this.props.history.goBack();
Toast.hide();
return result;
}
//下面的文件目录名称需要加上用户信息标识,如身份证等;
async function put (aaaa) {
try {
let result = await client.put(`xinbao-guangda/${names}`,file);
let result2 = await client.put(`xinbao-guangda/${names2}`,file2);
console.log(result,result2);
return success();
} catch (e) {
console.log(e);
Toast.fail('图片上传失败');
}
}
put(this);
当前问题共有如下(2)个解决方案
- helax
提工单咯,反应很快滴
atob is not defined
File is not defined
怎么解决的?