本文以PHP语言为例,讲解在服务端通过PHP代码完成签名,并且设置上传回调,然后通过表单直传数据到OSS。
前提条件
- Web服务器已部署。
- Web服务器对应的域名可通过公网访问。
- Web服务器能够解析PHP(执行命令
php -v
进行查看)。 - PC端浏览器支持JavaScript。
步骤1:配置Web服务器
本文档以Ubuntu16.04和Apache2.4.18为例,环境配置如下。
- Web服务器外网IP地址为
11.22.33.44
。您可以在配置文件/etc/apache2/apache2.conf
中增加ServerName 11.22.33.44
来进行修改。 - Web服务器的监听端口为
8080
。您可以在配置文件/etc/apache2/ports.conf
中进行修改相关内容Listen 8080
。 - 确保Apache能够解析PHP文件:
sudo apt-get install libapache2-mod-php5
(其他平台请根据实际情况进行安装配置)。
您可以根据自己的实际环境修改IP地址和监听端口。更新配置后,需要重启Apache服务器,重启命令为/etc/init.d/apache2 restart。
步骤2:配置应用服务器
步骤3:配置客户端
在应用服务器的/var/www/html/aliyun-oss-appserver-php目录下修改文件upload.js。
对于PHP版本的应用服务器源码,一般不需要修改文件upload.js内容,因为相对路径也是可以正常工作的。如果确实需要修改,请找到此段代码片段:serverUrl ='./php/get.php'
,将severUrl
改成服务器部署的地址,用于处理浏览器和应用服务器之间的通信。例如本示例中可以修改为:serverUrl ='http://11.22.33.44:8080/aliyun-oss-appserver-php/php/get.php'
。
步骤4:修改CORS
客户端进行表单直传到OSS时,会从浏览器向OSS发送带有Origin
的请求消息。OSS对带有Origin
头的请求消息会进行跨域规则(CORS)的验证。因此需要为Bucket设置跨域规则以支持Post方法。
步骤5:体验上传回调
应用服务器核心代码解析
应用服务器源码包含了签名直传服务和上传回调服务两个功能。
- 签名直传服务
签名直传服务响应客户端发送给应用服务器的GET消息,代码文件是aliyun-oss-appserver-php/php/get.php。代码片段如下:
$response = array(); $response['accessid'] = $id; $response['host'] = $host; $response['policy'] = $base64_policy; $response['signature'] = $signature; $response['expire'] = $end; $response['callback'] = $base64_callback_body; $response['dir'] = $dir;
- 上传回调服务
上传回调服务响应OSS发送给应用服务器的POST消息,代码文件是aliyun-oss-appserver-php/php/callback.php。
代码片段如下:
// 6.验证签名 $ok = openssl_verify($authStr, $authorization, $pubKey, OPENSSL_ALGO_MD5); if ($ok == 1) { header("Content-Type: application/json"); $data = array("Status"=>"Ok"); echo json_encode($data); }
更多详情请参见API文档Callback。