webapp调用摄像头(H5+),并发送给服务端
2020-08-13 本文已影响0人
echo三文鱼
//调用摄像头
let cmr = window.plus.camera.getCamera();
//获取图片格式(后面的参数要用到,虽然文档说是必填,但是实际不加也能成功)
let fmt=cmr.supportedImageFormats
//拍照事件
cmr.captureImage((filePath)=>{
//filePath返回的参是路径
window.plus.io.resolveLocalFileSystemURL( filePath, (fs)=>{//这个事件可以根据路径找到文件目录
fs.file( (file)=>{//这里返回的是文件本身
//下面是做的文件格式的转换,base64格式转成blob发送给服务端
let fileReader = new window.plus.io.FileReader();
fileReader.readAsDataURL(file, 'base64');
fileReader.onloadend = (evt)=>{
let binary = atob(evt.target.result.split(',')[1]);
let array = [];
for(let i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}
let dataImg = new Blob([new Uint8Array(array)], {type:'image/jpeg'});
//获取到文件,做相应的操作
}
} );
}, ()=>{
//console.log(error)
} );
},()=>{
//console.log(error)
},{
format:fmt,
});
问题:项目存在的问题就是文件转换那里,fs.file( (file) 里面的file得到的是文件本身,打印出来和在控制台和正常的文件是一样,但是前缀不同,一个是s{},正常的是file{},里面的对象都一致,但是上传之后,在formData里面识别的不同,file格式识别是blob流,但是s{}识别成[object,object],虽然上面的方法可以实现上传到服务端,但是最终得到的是blob格式的文件,需要更改后缀名,才能得到原始文件,记录一下问题。