You need to enable JavaScript to run this app.
文档中心
文档控制台
注册
对象存储

对象存储

复制全文
下载 pdf
上传对象
追加上传(.NET SDK)
复制全文
下载 pdf
追加上传(.NET SDK)

追加上传指使用 AppendObject 接口在已存在的对象数据末尾追加写入新数据。追加上传创建的对象类型为追加类型(Appendable Object),可在对象末尾追加写入数据。普通上传和分片上传创建的对象类型为普通类型(Normal Object),无法追加写入数据。

注意事项

  • 追加上传前,您需要确保账号拥有 tos:PutObject 权限,具体操作,请参见权限配置指南
  • 上传对象时,对象名称必须满足命名规范,详细信息,请参见对象的命名规范
  • TOS 是面向海量存储设计的分布式对象存储产品,内部分区存储了对象索引数据,为横向扩展您上传对象和下载对象时的最大吞吐量,和减小热点分区的概率,请您避免使用字典序递增的对象命名方式,详细信息,请参见性能优化
  • 如果桶中已经存在同名对象,则新对象会覆盖已有的对象。桶开启多版本的场景下,则会保留原有对象,生成一个新版本号用于标识新上传的对象。
  • 追加上传对象不支持 Chunk-Encoded 的请求方式,当您追加上传网络流时请迭代获取数据再追加上传。

限制说明

使用 AppendObject 接口时,对象的大小限制说明如下:

  • 追加后的对象大小不能大于 5GiB。
  • 通过 AppendObject 创建的对象,进行 PutObject 操作,对象被覆盖且对象类型由 Appendable 变为 Normal。反之通过 PutObject 上传的对象不支持追加写操作。
  • AppendObject 创建的对象不支持拷贝。
  • 如果对象类型为低频存储或归档闪回存储,则无法使用 AppendObject 接口。
  • 如果您的存储桶处于开启或暂停多版本控制功能的状态下,则无法使用 AppendObject 接口。

示例代码

以下代码用于先将指定字符流追加上传到指定文件,再将指定路径下的本地文件追加上传到同一个文件。

using System;
using System.IO;
using System.Text;
using TOS;
using TOS.Error;
using TOS.Model;

namespace ConsoleApp
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var ak = Environment.GetEnvironmentVariable("TOS_ACCESS_KEY");
            var sk = Environment.GetEnvironmentVariable("TOS_SECRET_KEY");
            // endpoint 若没有指定HTTP协议(HTTP/HTTPS),默认使用 HTTPS
            // Bucket 的 Endpoint,以华北2(北京)为例:https://tos-cn-beijing.volces.com
            var endpoint = "https://tos-cn-beijing.volces.com";
            var region = "cn-beijing";
            // 填写 BucketName
            var bucketName = "*** Provide your bucket name ***";
            // 上传对象 Body,以 string 对象为例
            var objectContent = "your append object value";
            // 将文件上传到 example_dir 目录下的 example.txt 文件
            var objectKey = "example_dir/example.txt";
            // 需要上传的本地文件
            var localFileName = "/usr/local/test.txt";

            // 创建TOSClient实例
            var client = TosClientBuilder.Builder().SetAk(ak).SetSk(sk).SetEndpoint(endpoint).SetRegion(region).Build();

            try
            {
                var binaryData = Encoding.UTF8.GetBytes(objectContent);
                AppendObjectOutput appendObjectOutput;

                // 通过字符串追加上传对象
                using (var requestContent = new MemoryStream(binaryData))
                {
                    // 创建追加上传文件输入
                    var appendObjectInput = new AppendObjectInput
                    {
                        Bucket = bucketName,
                        Key = objectKey,
                        Content = requestContent
                    };

                    // 上传字符流
                    appendObjectOutput = client.AppendObject(appendObjectInput);
                    Console.WriteLine("Append object succeeded, request id: {0} ", appendObjectOutput.RequestID);
                }

                // 从文件流中获取数据
                using (var fileStream = File.OpenRead(localFileName))
                {
                    // 创建追加上传文件输入
                    var appendObjectInput = new AppendObjectInput
                    {
                        Bucket = bucketName,
                        Key = objectKey,
                        // 指定下次 append offset
                        Offset = appendObjectOutput.NextAppendOffset,
                        Content = fileStream
                    };

                    // 上传文件流
                    appendObjectOutput = client.AppendObject(appendObjectInput);
                    Console.WriteLine("Append object succeeded, request id: {0} ", appendObjectOutput.RequestID);
                }
            }
            catch (TosServerException ex)
            {
                Console.WriteLine("Put object failed, request id {0}", ex.RequestID);
                Console.WriteLine("Put object failed, status code {0}", ex.StatusCode);
                Console.WriteLine("Put object failed, response error code {0}", ex.Code);
                Console.WriteLine("Put object failed, response error message {0}", ex.Message);
            }
            catch (TosClientException ex)
            {
                Console.WriteLine("Put object failed, error message {0}", ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Put object failed, {0}", ex.Message);
            }
        }
    }
}
最近更新时间:2024.12.19 16:12:56
这个页面对您有帮助吗?
有用
有用
无用
无用