追加上传是指通过AppendObject方法在已上传的追加类型文件(Appendable Object)末尾直接追加内容。
使用限制
通过追加上传的方式上传文件时,有如下限制:
- 如果文件不存在,则调用AppendObject接口会创建一个可追加类型的文件。
- 如果文件已存在,且为可追加类型文件时,若设置的追加位置和文件当前长度不等,则抛出PositionNotEqualToLength异常。如果文件已存在,且为不可追加类型文件时,则抛出ObjectNotAppendable异常。
- 追加类型的文件暂不支持CopyObject操作。
有关追加上传的更多信息,请参见AppendObject。有关追加上传完整代码的更多信息,请参见GitHub。
示例代码
以下代码用于追加上传:
using Aliyun.OSS;
// Endpoint以杭州为例,其它Region请按实际情况填写。
var endpoint = "<yourEndpoint>";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
var accessKeyId = "<yourAccessKeyId>";
var accessKeySecret = "<yourAccessKeySecret>";
// 设置Bucket名称。
var bucketName = "<yourBucketName>";
// 设置Object名称。即不包含Bucket名称在内的Object的完整路径,例如example/folder/abc.jpg。
var objectName = "<yourObjectName>";
// 设置本地文件名称。即填写本地文件的完整路径,例如/users/local/abc.jpg。
var localFilename = "<yourLocalFilename>";
// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
// 第一次追加的位置是0,返回值为下一次追加的位置。后续追加的位置是追加前文件的长度。
long position = 0;
try
{
var metadata = client.GetObjectMetadata(bucketName, objectName);
position = metadata.ContentLength;
}
catch (Exception) { }
try
{
using (var fs = File.Open(localFilename, FileMode.Open))
{
var request = new AppendObjectRequest(bucketName, objectName)
{
ObjectMetadata = new ObjectMetadata(),
Content = fs,
Position = position
};
// 追加文件。
var result = client.AppendObject(request);
// 设置文件的追加位置。
position = result.NextAppendPosition;
Console.WriteLine("Append object succeeded, next append position:{0}", position);
}
// 获取追加位置,再次追加文件。
using (var fs = File.Open(localFilename, FileMode.Open))
{
var request = new AppendObjectRequest(bucketName, objectName)
{
ObjectMetadata = new ObjectMetadata(),
Content = fs,
Position = position
};
var result = client.AppendObject(request);
position = result.NextAppendPosition;
Console.WriteLine("Append object succeeded, next append position:{0}", position);
}
}
catch (Exception ex)
{
Console.WriteLine("Append object failed, {0}", ex.Message);
}
有关Bucket名称命名规范的更多信息,请参见存储空间(Bucket)。有关Object名称命名规范的更多信息,请参见对象(Object)。
在文档使用中是否遇到以下问题
更多建议
匿名提交