Use a operação AppendObject para adicionar conteúdo a objetos anexáveis existentes.
Objetos enviados com a operação AppendObject são objetos anexáveis. Objetos enviados com a operação PutObject são objetos normais.
Observações de uso
Antes de executar o código de exemplo deste tópico, crie uma instância OSSClient usando métodos como nome de domínio personalizado ou Security Token Service (STS). Para mais informações, consulte Inicialização (Android SDK).
Ao enviar um objeto por anexação, defina corretamente o parâmetro position.
Ao criar um objeto anexável, defina o parâmetro position como 0.
-
Ao adicionar conteúdo a um objeto anexável, defina o parâmetro position com o tamanho atual do objeto.
Obtenha o tamanho do objeto na resposta do upload por anexação anterior ou use a operação HeadObject.
Permissões
Por padrão, uma conta Alibaba Cloud tem permissões completas. Usuários RAM ou funções RAM vinculados a uma conta Alibaba Cloud não têm permissões por padrão. A conta Alibaba Cloud ou o administrador da conta deve conceder as permissões de operação por meio de políticas RAM ou Bucket Policy.
|
API |
Action |
Descrição |
|
AppendObject |
|
Use esta operação para enviar um objeto anexando-o a um objeto existente. |
|
|
Necessária quando tags de objeto são especificadas via x-oss-tagging durante o upload por anexação. |
Exemplos de código
O código a seguir demonstra como anexar dados a um objeto.
// Specify the bucket name, the full path of the object, and the full path of the local file. Example: examplebucket, exampledir/exampleobject.txt, and /storage/emulated/0/oss/examplefile.txt.
// The full path of the object cannot contain the bucket name.
AppendObjectRequest append = new AppendObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("text/plain");
append.setMetadata(metadata);
// Set the append position.
append.setPosition(0);
// Set the callback.
append.setProgressCallback(new OSSProgressCallback<AppendObjectRequest>() {
@Override
public void onProgress(AppendObjectRequest request, long currentSize, long totalSize) {
Log.d("AppendObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
}
});
// Asynchronously append data.
OSSAsyncTask task = oss.asyncAppendObject(append, new OSSCompletedCallback<AppendObjectRequest, AppendObjectResult>() {
@Override
public void onSuccess(AppendObjectRequest request, AppendObjectResult result) {
Log.d("AppendObject", "AppendSuccess");
Log.d("NextPosition", "" + result.getNextPosition());
}
@Override
public void onFailure(AppendObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// Handle exceptions.
}
});
No armazenamento com escopo do Android 10 e versões posteriores, use a URI do arquivo para enviá-lo ao OSS.
// Specify the bucket name and the full path of the object. Example: examplebucket and exampledir/exampleobject.txt.
// The full path of the object cannot contain the bucket name.
AppendObjectRequest append = new AppendObjectRequest("examplebucket", "exampledir/exampleobject.txt", fileUri);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("text/plain");
append.setMetadata(metadata);
// Set the append position.
append.setPosition(0);
// Set the callback.
append.setProgressCallback(new OSSProgressCallback<AppendObjectRequest>() {
@Override
public void onProgress(AppendObjectRequest request, long currentSize, long totalSize) {
Log.d("AppendObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
}
});
// Asynchronously append data.
OSSAsyncTask task = oss.asyncAppendObject(append, new OSSCompletedCallback<AppendObjectRequest, AppendObjectResult>() {
@Override
public void onSuccess(AppendObjectRequest request, AppendObjectResult result) {
Log.d("AppendObject", "AppendSuccess");
Log.d("NextPosition", "" + result.getNextPosition());
}
@Override
public void onFailure(AppendObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// Handle exceptions.
}
});
Referências
Para obter o código de exemplo completo sobre uploads por anexação, consulte o exemplo no GitHub.
Para obter detalhes sobre a operação de API de uploads por anexação, consulte AppendObject.
Para saber como inicializar um OSSClient, consulte Inicializar uma instância OSSClient para Android.