开发者社区 问答 正文

PHP-SDK之如何实现上传文件(一)?

在OSS中,用户操作的基本数据单元是文件(Object)。OSS PHP SDK提供了丰富的文件上传接口,可以通过以下方式上传文件:

  • 字符串上传
  • 文件上传
  • 追加上传
  • 分片上传

字符串上传、文件上传、追加上传的文件最大不能超过5GB。当文件较大时,请使用分片上传,分片上传文件大小不能超过48.8TB。

字符串上传


下面的代码实现了上传指定字符串中的内容到文件中: <?php
/**
* 上传字符串作为object的内容
*
* @param OssClient $ossClient OSSClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function putObject($ossClient, $bucket)
{
    $object = "oss-php-sdk-test/upload-test-object-name.txt";
    $content = file_get_contents(__FILE__);
    try{
        $ossClient->putObject($bucket, $object, $content);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}



上传本地文件


下面的代码实现了上传指定的本地文件到文件中: <?php
/**
* 上传指定的本地文件内容
*
* @param OssClient $ossClient OSSClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function uploadFile($ossClient, $bucket)
{
    $object = "oss-php-sdk-test/upload-test-object-name.txt";
    $filePath = __FILE__;
    try{
        $ossClient->uploadFile($bucket, $object, $filePath);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}

提示:
  • 使用上述方法上传最大文件不能超过5G, 如果超过可以使用分片文件上传


追加上传


简单上传,分片上传,断点续传上传,创建的Object都是Normal类型,这种Object在上传结束之后内容就是固定的,只能读取,不能修改。如果Object内容发生了改变,只能重新上传同名的Object来覆盖之前的内容,这也是OSS和普通文件系统使用的一个重大区别。正因为这种特性,在很多应用场景下会很不方便,典型比如视频监控、视频直播领域等,视频数据在实时的不断产生。
OSS提供了用户通过追加上传(Append Object)的方式在一个Object后面直接追加内容的功能。通过这种方式操作的Object的类型为Appendable Object,而其他的方式上传的Object类型为Normal Object。每次追加上传的数据都能够即时可读。

追加上传字符串


下面的代码实现了追加上传指定字符串到文件(Object)中: <?php
/**
* 字符串追加上传
*
* @param OssClient $ossClient OSSClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function putObject($ossClient, $bucket)
{
    $object = "oss-php-sdk-test/append-test-object-name.txt";
    $content_array = array('Hello OSS', 'Hi OSS', 'OSS OK');
    try{
        $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[0], 0);
        $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[1], $position);
        $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[2], $position);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}



追加上传文件


下面的代码实现了追加上传本地文件(File)到OSS文件(Object): /**
* 文件追加上传
*
* @param OssClient $ossClient OSSClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function putObject($ossClient, $bucket)
{
    $object = "oss-php-sdk-test/append-test-object-name.txt";
    try{
        $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, 0);
        $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, $position);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}


提示:
  • 追加上传的次数没有限制,文件大小上限为5GB。更大的文件请使用分片上传;
  • 追加类型的文件(Append Object)暂时不支持copyObject操作。






展开
收起
青衫无名 2017-10-19 09:57:52 1917 分享 版权
0 条回答
写回答
取消 提交回答