O SDK do Object Storage Service (OSS) para Android oferece métodos para verificar a integridade e garantir a segurança dos dados durante o upload, o download ou a cópia de objetos.
Notas de uso
Crie uma instância do OSSClient por meio de métodos como a utilização de um nome de domínio personalizado ou do Security Token Service (STS) e, em seguida, execute o código de exemplo neste tópico. Para mais informações, consulte Initialization (Android SDK).
Informações de contexto
Devido à complexidade do ambiente de redes móveis, podem ocorrer erros durante a transferência de dados entre o cliente e o servidor. O SDK do OSS para Android oferece os métodos de verificação CRC-64 e MD5 para garantir a integridade dos dados.
Verificação de redundância cíclica
Quando a verificação CRC-64 é ativada para a leitura do fluxo de dados, o OSS verifica automaticamente a integridade dos dados após a conclusão da leitura.
Ative o CRC-64 conforme o código de exemplo a seguir:
Neste exemplo, usa-se a operação síncrona getObject. Execute operações síncronas em uma thread filha.
// Specify the bucket name, such as examplebucket, and the full path of the object, such as exampledir/exampleobject.txt.
// Do not include the bucket name in the full path of the object.
String bucketName = "examplebucket";
String objectKey = "exampledir/exampleobject.txt";
GetObjectRequest request = new GetObjectRequest(bucketName, objectKey);
// Enable CRC-64 validation.
request.setCRC64(OSSRequest.CRC64Config.YES);
try{
GetObjectResult result = oss.getObject(request);
InputStream in = result.getObjectContent();
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
int len;
while ((len = in.read(buffer)) > -1) {
output.write(buffer, 0, len);
}
output.flush();
in.close();
} catch (ServiceException e) {
Log.e("ErrorCode", e.getErrorCode());
Log.e("RequestId", e.getRequestId());
Log.e("HostId", e.getHostId());
Log.e("RawMessage", e.getRawMessage());
} catch (ClientException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Verificação de MD5
Verifique se o objeto enviado via upload multipart corresponde ao arquivo local. Para isso, especifique o valor Content-MD5 na solicitação de upload ao enviar as partes. O OSS verifica a consistência do valor MD5 para garantir a integridade dos dados. O upload só é bem-sucedido se o hash MD5 do objeto recebido pelo servidor OSS for idêntico ao valor Content-MD5. Esse método assegura a consistência do objeto enviado.
Ative a verificação de MD5 conforme o código de exemplo a seguir:
// Specify the bucket name, such as examplebucket, the full path of the object, such as exampledir/exampleobject.txt, and the full path of the local file, such as /storage/emulated/0/oss/examplefile.txt.
// Do not include the bucket name in the full path of the object.
String bucketName = "examplebucket";
String objectKey = "exampledir/exampleobject.txt";
String filePath = "/storage/emulated/0/oss/examplefile.txt";
// Construct an upload request.
ObjectMetadata metadata = new ObjectMetadata();
try {
// Calculate the Base64-encoded MD5 hash.
String fileMD5 = BinaryUtil.calculateBase64Md5(filePath);
Log.i("oss", "file md5: " + fileMD5);
metadata.setContentMD5(fileMD5);
} catch (IOException e) {
Log.e("oss", "Calculate file md5 error: " + e.getMessage());
}
PutObjectRequest put = new PutObjectRequest(bucketName, objectKey, filePath);
put.setMetadata(metadata);
OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
@Override
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
Log.d("PutObject", "UploadSuccess");
Log.d("ETag", result.getETag());
Log.d("RequestId", result.getRequestId());
}
@Override
public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// Handle request exceptions.
if (clientExcepion != null) {
// Handle client-side exceptions, such as network errors.
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// Handle server-side exceptions.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
Referências
Para mais informações sobre como inicializar uma instância do OSSClient, consulte Initialization.