阿余
阿余
  • 发布:2016-06-21 16:10
  • 更新:2016-07-11 14:42
  • 阅读:1678

【报Bug】uploader不符合rfc1867

分类:HTML5+

详细问题描述
[内容]

我用H5+调用本地文件(通过H5+拍摄的照片),然后通过uploader上传到阿里云的OSS云存储上,返回
405 Method Not Allowed的错误,经与阿里技术支持人员沟通,发现用H5+的uploader和plupload上传时的差别,用plupload上传时content-type:multipart/form-data;+空格+boundary=,而用H5+上传时content-type:multipart/form-data;boundary=,注意,就是在form-data;与boundary之间的空格,按rfc1867协议是需要一个空格的,而在uploader的header里没有这个空格。

运行环境

M2 miui8

2016-06-21 16:10 负责人:无 分享
已邀请:
李by白

李by白

你好可以给我发一下你是怎么上传图片到阿里云oss的代码吗?万份感谢,弄了好久弄不好我的邮箱是libybai@icloud.com

阿余

阿余 (作者)

// 处理捕获图片事件
camera.captureImage(function(filePath) {
$.ajax({
url: "stock_oss_PostObjectPolicy.do",
success: function(rst) {

            if (rst instanceof Object == false) rst = JSON.parse(rst);  

            // 上传文件的扩展名  
            var suffix = filePath.substring(filePath.lastIndexOf("."));  

            // 上传进度  
            var progress = 0;  
            // 进度条容器  
            var container = $("body");  

            // 上传图片  
            var uploader = plus.uploader.createUpload(rst.host, {  
                method:"POST",  
                priority:100  
            },  
            function (uploader, status) {  
                console.log("上传完成");  
                app.hideProgressbar(container);  
                console.log("status:"   status   " responseText:"   uploader.responseText);  
            });  

            // 指定要上传的文件  
            uploader.addFile(filePath, {key: "file", name: "file", mime: "image/jpeg"});  

            // 要提交的参数  
            uploader.addData("key", rst.dir   new Date().getTime()   suffix);  
            uploader.addData("policy", rst.policy);  
            uploader.addData("OSSAccessKeyId", rst.accessid);  
            uploader.addData("success_action_status", "200");  
            uploader.addData("signature", rst.signature);  
            uploader.addData("callback", rst.callback);  

            // 状态切换  
            uploader.addEventListener("statechanged", function(uploader, status) {  
                if (uploader.state == 0) {  
                    console.log("上传开始");  
                    app.showProgressbar(container, 0);  
                } else if (uploader.state == 3) {  
                    var percent = Math.round((uploader.uploadedSize / uploader.totalSize) * 100);  
                    if (percent - progress >= 5) {  
                        console.log("上传了"   percent  "%");  
                        app.setProgressbar(container, percent);  
                        progress = percent;  
                    }  
                }  
            }, false );  
            uploader.start();  

        }  
    });  
    console.log(filePath);  
}, function(s) {  
    console.log("error"   s);  
}, {  
    filename: "_doc/head.jpg"  
})  

};

以上为我的代码,目前没有调试通过,原因就是uploader的content-type缺少一个空格

  • 阿余 (作者)

    目前正在等待官方确认是否为BUG,然后处理

    2016-06-22 00:15

  • 李by白

    非常感谢,

    2016-06-22 14:47

  • jqr

    可以了吗,今天试了还是不行,抓包看了content-type已有空格,,调了一天就是不行,楼主能否分享下感激!!!

    2016-07-11 23:05

  • 阿余 (作者)

    参数要有顺序,文本参数在前,文件参数在后才行

    2016-07-14 15:28

  • WinXP

    这样子是不是每次只能上传一张图片?

    2016-10-20 14:48

也许你面容憔悴

也许你面容憔悴

这个问题还存在吗?我刚也遇到了。

  • 阿余 (作者)

    hbuilder的alpha已经解决,正式版本不知道,可能后续会更新,你可以试一下,或抓一下包试试

    2016-07-14 15:30

该问题目前已经被锁定, 无法添加新回复