首页 > 技术文章 > 手机浏览器<input type="file">拍照兼容

suiyide 2018-06-29 11:39 原文

项目中一个功能是拍照上传,开始想着不是很简单吗?不就是

<input type="file" id="file" accept="image/*;capture=camera" />

但是由于目前做的是混合app,在ios下是可以正常拍照的,安卓用扣扣,UC各种浏览器打开也都没问题,然而安卓一旦脱离这些浏览器,就只能选择相册中的照片不能拍照了

网上找了一堆input的兼容,但是都没有效果 

后来找到了:http://www.html5plus.org/doc/zh_cn/camera.html

上代码:

拍照:

getCamera(e){
                var that=this
                plus.camera.getCamera().captureImage(function(e){
                    console.log(e);
                    plus.io.resolveLocalFileSystemURL(e, function(entry) {
                        var path = entry.toLocalURL();
                        document.getElementById("pic").src = path;
                       
                    }, function(e) {
//                        mui.toast("读取拍照文件错误:" + e.message);
                    });

                });
            },

相册获取图片:

album(){
                var that=this
                plus.gallery.pick(function(path){
                    plus.io.resolveLocalFileSystemURL(path, function(entry) {
                        var path = entry.toLocalURL();
                        document.getElementById("pic").src = path;
                      
                       
                    }, function(e) {
//                        mui.toast("读取拍照文件错误:" + e.message);
                    });
                });
            },

上传:

 upload(src){
                //服务端接口路径
                var that=this
               
                //获取图片元素
//              var files = document.getElementById('headimg');
                // 上传文件
                //              task.addData("name","photo");
                var wt=plus.nativeUI.showWaiting();
                var task=plus.uploader.createUpload(url,
                    {method:"POST", priority: 60, timeout: 20, blocksize:100000000241024,retry:1},
                    function(t,status){ //上传完成
                        
                        if(status==200){
//                                alert("上传成功:"+t.responseText);
                            wt.close(); //关闭等待提示按钮
                        }else{
                            alert("上传失败");
                            wt.close();//关闭等待提示按钮
                        }
                    }
                );
                //添加其他参数
                task.addFile(src,{key:"uploadFile"});

                task.start();
            }

经测试,此方式可兼容安卓,iOS,然而图片未压缩,上传速度慢,同样查看文档找到压缩代码:

 resizeImage(src) {
              var that = this;
              plus.zip.compressImage(
                {
                  src: src,
                  dst: src,
                  overwrite: true,
                  width: '270px', //这里指定了宽度,同样可以修改
                  format: 'jpg',
                  quality: 100  //图片质量不再修改,以免失真
                },
                function(e) {
                  plus.nativeUI.closeWaiting();
                  that.upload(e.target);  //上传图片, e.target存的是本地路径!
                },
                function(err) {
                  plus.nativeUI.alert('未知错误!',function() {
//                    mui.back();
                  });
                }
              );
            },

以上。

 

推荐阅读