开发者社区> 问答> 正文

php sdk使用URL签名授权下载链接访问

已解决

展开
收起
2018-04-10 21:31:12 1064 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    使用签名URL进行临时授权

    您可以将生成的签名URL提供给访客进行临时访问。生成签名URL时,您可以指定URL的过期时间,来限制访客的访问时长。授权访问的完整代码请参见GitHub

    生成下载的签名URL

    以下代码用于生成下载的签名URL:

    1. <?php
    2. if (is_file(__DIR__ . '/../autoload.php')) {
    3. require_once __DIR__ . '/../autoload.php';
    4. }
    5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    6. require_once __DIR__ . '/../vendor/autoload.php';
    7. }
    8. use OSS\OssClient;
    9. use OSS\Core\OssException;
    10. use OSS\Http\RequestCore;
    11. use OSS\Http\ResponseCore;
    12. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    13. $accessKeyId = "<yourAccessKeyId>";
    14. $accessKeySecret = "<yourAccessKeySecret>";
    15. // Endpoint以杭州为例,其它Region请按实际情况填写。
    16. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    17. $bucket= "<yourBucketName>";
    18. $object = "<yourObjectName>";
    19. $securityToken = "<yourSecurityToken>";
    20. // 设置URL的有效期为3600秒。
    21. $timeout = 3600;
    22. try {
    23. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
    24. // 生成GetObject的签名URL。
    25. $signedUrl = $ossClient->signUrl($bucket, $object, $timeout);
    26. } catch (OssException $e) {
    27. printf(__FUNCTION__ . ": FAILED\n");
    28. printf($e->getMessage() . "\n");
    29. return;
    30. }
    31. print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
    32. // 可以使用代码来访问签名的URL,也可以输入到浏览器中进行访问。
    33. $request = new RequestCore($signedUrl);
    34. // 生成的URL默认以GET方式访问。
    35. $request->set_method('GET');
    36. $request->add_header('Content-Type', '');
    37. $request->send_request();
    38. $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code());
    39. if ($res->isOK()) {
    40. print(__FUNCTION__ . ": OK" . "\n");
    41. } else {
    42. print(__FUNCTION__ . ": FAILED" . "\n");
    43. };

    生成上传的签名URL

    以下代码用于生成上传的签名URL:

    1. <?php
    2. if (is_file(__DIR__ . '/../autoload.php')) {
    3. require_once __DIR__ . '/../autoload.php';
    4. }
    5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    6. require_once __DIR__ . '/../vendor/autoload.php';
    7. }
    8. use OSS\OssClient;
    9. use OSS\Core\OssException;
    10. use OSS\Http\RequestCore;
    11. use OSS\Http\ResponseCore;
    12. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    13. $accessKeyId = "<yourAccessKeyId>";
    14. $accessKeySecret = "<yourAccessKeySecret>";
    15. // Endpoint以杭州为例,其它Region请按实际情况填写。
    16. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    17. $bucket= "<yourBucketName>";
    18. $object = "<yourObjectName>";
    19. $securityToken = "<yourSecurityToken>";
    20. $timeout = 3600;
    21. try {
    22. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
    23. // 生成PutObject的签名URL。
    24. $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT");
    25. } catch (OssException $e) {
    26. printf(__FUNCTION__ . ": FAILED\n");
    27. printf($e->getMessage() . "\n");
    28. return;
    29. }
    30. print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
    31. $content = "Hello OSS.";
    32. $request = new RequestCore($signedUrl);
    33. // 生成的URL以PUT方式访问。
    34. $request->set_method('PUT');
    35. $request->add_header('Content-Type', '');
    36. $request->add_header('Content-Length', strlen($content));
    37. $request->set_body($content);
    38. $request->send_request();
    39. $res = new ResponseCore($request->get_response_header(),
    40. $request->get_response_body(), $request->get_response_code());
    41. if ($res->isOK()) {
    42. print(__FUNCTION__ . ": OK" . "\n");
    43. } else {
    44. print(__FUNCTION__ . ": FAILED" . "\n");
    45. };

    使用STS进行临时授权

    您可以通过STS(Security Token Service)进行临时授权访问。更多有关STS的内容请参见访问控制API参考(STS)中的简介。关于账号及授权的详细信息请参见最佳实践中的STS临时授权访问

    以下代码用于使用STS临时授权上传文件:

    1. <?php
    2. if (is_file(__DIR__ . '/../autoload.php')) {
    3. require_once __DIR__ . '/../autoload.php';
    4. }
    5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    6. require_once __DIR__ . '/../vendor/autoload.php';
    7. }
    8. use OSS\OssClient;
    9. use OSS\Core\OssException;
    10. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    11. $accessKeyId = "<yourAccessKeyId>";
    12. $accessKeySecret = "<yourAccessKeySecret>";
    13. // Endpoint以杭州为例,其它Region请按实际情况填写。
    14. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    15. $bucket= "<yourBucketName>";
    16. $object = "<yourObjectName>";
    17. $securityToken = "<yourSecurityToken>";
    18. $content = "Hi, OSS.";
    19. try {
    20. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
    21. $ossClient->putObject($bucket, $object, $content);
    22. } catch (OssException $e) {
    23. print $e->getMessage();
    24. }
    2018-04-12 10:22:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载