php数据上传到oss php数据上传到服务器( 四 )


第三:等文件数据上传完,OSS给用户Response前,OSS会根据用户的回调设置,请求用户的服务器 。
第四:如果应用服务器返回成功,那么就返回用户成功,如果应用服务器返回失败 , 那么OSS也返回给用户失败 。这样确保了用户上传成功的照片,应用服务器都已经收到通知了 。
第五:应用服务器给OSS返回 。
第六:OSS将应用服务器返回的内容返回给OSS 。
上传回调功能目前只开放了两个域 ,  杭州跟北京(即通过oss.aliyuncs.com, oss-cn-hangzhou.aliyuncs.com, oss-cn-beijing.aliyuncs.com这三个域名能调用上传回调) 。只有上传域名是这两个域,才能调用上传回调 。
示例
示例:用手机测试该上传是否有效 。二维码:可以用手机(微信,QQ,手机浏览器等)扫一扫试试(这个不是广告,只是上述网址的二维码 。这为了让大家看一下这个实现能在手机端完美运行 。)文件上传是上传到一个测试的公共 bucket , 会定时清理,所以不要传一些敏感及重要数据代码要添加的东西
复制代码
new_multipart_params = {
'key' : key + '${filename}',
'policy': policyBase64,
'OSSAccessKeyId': accessid,
'success_action_status' : '200', //让服务端返回200,不然 , 默认会返回204'callback':callbackbody,
'signature': signature,
};
上述的callbackbody 是php服务端返回的 。在本例中,从后端php取到的内容如下:
复制代码
{"accessid":"6MKOqxGiGU4AUk44",
"host":"http:\/\/post-test.oss-cn-hangzhou.aliyuncs.com","policy":"eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wNVQyMDo1MjoyOVoiLCJjdb25kaXRpb25zIjpbWyJjdb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDAwXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsInVzZXItZGlyXC8iXV19","signature":"VsxOcOudxDbtNSvz93CLaXPz+4s=","expire":1446727949,
"callback":"eyJjYWxsYmFja1VybCI6Imh0dHA6Ly9vc3MtZGVtby5hbGl5dW5jcy5jdb206MjM0NTAiLCJjYWxsYmFja0hvc3QiOiJvc3MtZGVtby5hbGl5dW5jcy5jdb20iLCJjYWxsYmFja0JvZHkiOiJmaWxlbmFtZT0ke29iamVjdH0mc2l6ZT0ke3NpemV9Jm1pbWVUeXBlPSR7bWltZVR5cGV9JmhlaWdodD0ke2ltYWdlSW5mby5oZWlnaHR9JndpZHRoPSR7aW1hZ2VJdbmZvLndpZHRofSIsImNhbGxiYWNrQm9keVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifQ==","dir":"user-dir\/"}
上面提到callbackbody, 就是上述返回结果里面的callback内容,经过base64编码后的 。
解码后的内容如下:
复制代码
{"callbackUrl":"","callbackHost":"oss-demo.aliyuncs.com",
"callbackBody":"filename=${object}size=${size}mimeType=${mimeType}height=${imageInfo.height}width=${imageInfo.width}","callbackBodyType":"application/x-www-form-urlencoded"}
内容的解析如下:
CallbackUrl: 指的是oss往这个机器发送的url请求 。
callbackHost:指的的oss发送这个请求时,请求头部所带的Host头callbackBody: OSS请求时,发送给应用服务器的内容,可以包括文件的名字,大小,类型,如果是图片可以是图片的高度,宽度callbackBodyType: 请求发送的Content-Type
代码下载
oss-h5-upload-js-php-callback.tar.gz (412 K) 下载次数:522应用服务器
在上述有一个很重要的地方就是第四步和第五步,OSS与应用服务器交互的时候,问题1:如果我是开发者,那么我要怎么样确认请求是从OSS发送过来的呢?
答案:OSS发送请求时,会跟应用服务器构造签名 。两者通过签名保证 。
问题2: 这个签名是怎么做的?或者有示例代码吗?
答案:有的 。我上面的例子里面是Callback应用服务器的例子是: (目前只支持linux)上面运行的代码是:
callback_app_server.py.zip (2 K) 下载次数:365运行方案,在linux下面直接执行里面的文件:
python callback_app_server.py
即可,程序自实现了一个简单的http server.
是不是很简单?。。。?

推荐阅读