开发者社区 问答 正文

php sdk拷贝文件

已解决

展开
收起
fufwn6dlduwmo 2018-05-14 14:55:41 708 分享 版权
1 条回答
写回答
取消 提交回答
  • 用户已注销
    采纳回答

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

    简单拷贝

    以下代码用于拷贝小于1GB的文件:

    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. $from_bucket = "<yourFromBucketName>";
    16. $from_object = "<yourFromObjectName>";
    17. $to_bucket = $bucket;
    18. $to_object = $from_object . '.copy';
    19. try{
    20. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
    21. $ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object);
    22. } catch(OssException $e) {
    23. printf(__FUNCTION__ . ": FAILED\n");
    24. printf($e->getMessage() . "\n");
    25. return;
    26. }
    27. print(__FUNCTION__ . ": OK" . "\n");
    28. `

    拷贝大文件

    对于大于1GB的文件,需要使用分片拷贝。分片拷贝分为三步:

    1. 通过$ossClient->initiateMultipartUpload初始化分片拷贝任务。
    2. 通过$ossClient->uploadPartCopy进行分片拷贝。除最后一个分片外,其它分片都要大于100KB。
    3. 通过$ossClient->completeMultipartUpload提交分片拷贝任务。

    以下代码用于分片拷贝:

    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. $src_bucket = "<yourSourceBucketName>";
    16. $src_object = "<yourSourceObjectName>";
    17. $dst_bucket = "<yourDestinationBucketName>";
    18. $dst_object = "<yourDestinationObjectName>";
    19. try{
    20. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
    21. // 初始化分片。
    22. $upload_id = $ossClient->initiateMultipartUpload($dst_bucket, $dst_object);
    23. $copyId = 1;
    24. // 逐个分片拷贝。
    25. $eTag = $ossClient->uploadPartCopy( $src_bucket, $src_object, $dst_bucket, $dst_object,$copyId, $upload_id);
    26. $upload_parts[] = array(
    27. 'PartNumber' => $copyId,
    28. 'ETag' => $eTag,
    29. );
    30. // 完成分片拷贝。
    31. $result = $ossClient->completeMultipartUpload($dst_bucket, $dst_object, $upload_id, $upload_parts);
    32. } catch(OssException $e) {
    33. printf(__FUNCTION__ . ": FAILED\n");
    34. printf($e->getMessage() . "\n");
    35. return;
    36. }
    37. print(__FUNCTION__ . ": OK" . "\n");
    2018-05-21 00:28:22
    赞同 展开评论