怎么把 图片路径转换成可以上传服务器的格式

最近做APP项目,需要拍照获取照片,上传给服务器,我使用的h5+ 里面的方法

var camera = plus.camera.getCamera(1); //获取摄像头管理对象
    camera.captureImage(function(capturedFile) {
        console.log("capturedFile:" + capturedFile);
    }, function(e) {
            console.log("拍照错误:" + e.message);
    }, {
        index: 1,
    popover: {
            top: '0px',
            left: '0px'
    }
});

现在可以调取摄像头拍照,返回路径 _doc/15132648561.jpg
然后怎么把图片路径用ajax上传到服务器,
或者哪位大神有别的调取摄像头和上传方法也可以。谢谢了。

阅读 4.8k
4 个回答

如果你使用的是HTML5+这个第三方库的话,你应该看看关于文件上传的api,下面是他的其中是一个示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Uploader Example</title>
<script type="text/javascript" >
// 扩展API加载完毕后调用onPlusReady回调函数 
document.addEventListener( "plusready", onPlusReady, false );
var r = null; 
// 扩展API加载完毕,现在可以正常调用扩展API 
function onPlusReady() {
}
// 创建上传任务
function createUpload() {
    var task = plus.uploader.createUpload( "http://www.test.com/upload.do", 
        { method:"POST",blocksize:204800,priority:100 },
        function ( t, status ) {
            // 上传完成
            if ( status == 200 ) { 
                alert( "Upload success: " + t.url );
            } else {
                alert( "Upload failed: " + status );
            }
        }
    );
    task.addFile( "_www/a.doc", {key:"testdoc"} );
    task.addData( "string_key", "string_value" );
    //task.addEventListener( "statechanged", onStateChanged, false );
    task.start();
}
</script>
</head>
<body >
    <input id="upload" type="button" value="Create upload task" onclick="createUpload();" ></input>
</body>
</html>

Uploader模块管理网络上传任务,用于从本地上传各种文件到服务器,并支持跨域访问操作。通过plus.uploader可获取上传管理对象。Uploader上传使用HTTP的POST方式提交数据,数据格式符合Multipart/form-data规范,即rfc1867(Form-based File Upload in HTML)协议。

参考:Plus之uploader部分

content-type 设为 multipart/form-data 正常 ajax 请求就可以了

封装了两个工具函数
调摄像头拍照 转为 base64
base64 用 Blob函数转为数据文件
进行上述两步之后,可进行formdata.append('key', value, '文件名')使用formdata进行上传。
其中Blob函数的兼容性没实测,根据can i use网站上的结果应该没问题。
同级还有一个用File函数生成数据文件的,但是不要用,兼容比较差。
当然你也可以使用其他答案的uploader方法直接进行文件上传。

使用安卓原生多好,为什么采用h5呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题