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格式的文件,需要更改后缀名,才能得到原始文件,记录一下问题。

上一篇下一篇

猜你喜欢

热点阅读