Chame a operação AppendObject para adicionar conteúdo a objetos anexáveis existentes no Object Storage Service.
Observações
Neste tópico, usamos o endpoint público da região china (Hangzhou). Para acessar o OSS a partir de outros service da Alibaba Cloud na mesma região, defina um endpoint interno. Para obter mais informações sobre as regiões e endpoints do OSS, consulte Regions and endpoints.
Este tópico mostra como crie uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como usar um domínio personalizado ou autenticar com credenciais do Security Token service (STS), consulte Create an OssClient instance.
Se o objeto de destino não existir, a operação AppendObject cria um objeto anexável.
-
Se o objeto de destino já existir:
Se o objeto for anexável e a posição inicial especificada para a adição for igual ao tamanho atual do objeto, a operação adiciona os dados ao final do objeto.
Se o objeto for anexável e a posição inicial especificada for diferente do tamanho atual do objeto, o sistema retorna o erro PositionNotEqualToLength.
Se o objeto não for anexável, o sistema retorna o erro ObjectNotAppendable.
Permissões
Por padrão, uma conta Alibaba Cloud tem permissões totais. Usuários ram ou funções ram sob uma conta Alibaba Cloud não têm permissões por padrão. O administrador da conta Alibaba Cloud deve conceder as permissões de operação por meio de RAM policies ou Bucket Policy.
|
API |
Ação |
Descrição |
|
AppendObject |
|
Chame esta operação para fazer o upload de um objeto adicionando-o a um objeto existente. |
|
|
Durante o upload de um objeto por adição, especifique tags de objeto por meio de x-oss-tagging. Nesse caso, esta permissão é obrigatória. |
Código de exemplo
O código a seguir mostra um exemplo de como adicionar dados a um objeto:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize the OSS account information. */
/* Set yourEndpoint to the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the bucket name, for example, examplebucket. */
std::string BucketName = "examplebucket";
/* Specify the full path of the object. The full path cannot contain the bucket name. For example, exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Initialize network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before running this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
auto meta = ObjectMetaData();
meta.setContentType("text/plain");
/* The position for the first append operation is 0. The return value indicates the position for the next append operation. The position for subsequent append operations is the length of the object before the append. */
std::shared_ptr<std::iostream> content1 = std::make_shared<std::stringstream>();
*content1 <<"Thank you for using Alibaba Cloud Object Storage Service!";
AppendObjectRequest request(BucketName, ObjectName, content1, meta);
request.setPosition(0L);
/* Append data to the object for the first time. */
auto result = client.AppendObject(request);
if (!result.isSuccess()) {
/* Handle exceptions. */
std::cout << "AppendObject fail" <<
",code:" << result.error().Code() <<
",message:" << result.error().Message() <<
",requestId:" << result.error().RequestId() << std::endl;
return -1;
}
std::shared_ptr<std::iostream> content2 = std::make_shared<std::stringstream>();
*content2 <<"Thank you for using Alibaba Cloud Object Storage Service!";
auto position = result.result().Length();
AppendObjectRequest appendObjectRequest(BucketName, ObjectName, content2);
appendObjectRequest.setPosition(position);
/* Append data to the object for the second time. */
auto outcome = client.AppendObject(appendObjectRequest);
if (!outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "AppendObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Release network resources. */
ShutdownSdk();
return 0;
}
Referências
Para ver o código de exemplo completo para uploads por adição, consulte o exemplo no GitHub.
Para obter mais informações sobre a operação de API de upload por adição, consulte AppendObject.