详细问题描述
[内容]
我的应用是将手机拍照的文件上传到阿里云的OSS上,现在遇到个问题,我的代码如下:
// 要提交的参数
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("callback", rst.callback);
uploader.addData("signature", rst.signature);
// 指定要上传的文件
uploader.addFile(filePath, {key: "file", name: "file", mime: "image/jpeg"});
上面代码明确表示了,我加入参数的顺序,即参数key必须在第一个,文件必须在所有参数的最后,如果有多个文件,也必须按加入的顺序提交请求
而我抓到的http请求的数据是这样的:
从提交的参数和HTTP抓包的结果看出,提交的请求的参数顺序没有规则,不是按我预置的顺序排序并提交请求的。
这个问题在一般的软件开发没有问题,因为一般的开发,处理方式都是获取到整个请求数据后,再获取相应的参数或文件进行处理,但上传到阿里云OSS的请求就必须是参数在前,文件在后,因为文件可能很大,最大5G,并且OSS有安全校验,这个校验必须依据前面的参数进行判断,如果发现不合法,后面的文件就会直接不处理,不接收,不保存。如果合法,参数里有文件名(key),也才知道文件收到后该保存成什么名字。而我们平常的WEB上传处理,比如java的Servlet对文件的处理都是先自动保存一个临时文件,我们直接对这个文件进行处理就行了。但OSS的文件可能很大,不可能先保存一个临时文件,再按指定的文件命名,而是直接知道名称直接流式保存文件了。
所以请技术团队确认并处理这个问题,谢谢!
hbuilder使用的是alpha最新版,即6月22号晚10点的版本
手机用的mi2 miui8