Le SDK Object Storage Service (OSS) pour Android propose des méthodes pour vérifier l'intégrité des données et garantir leur sécurité lors du chargement, du téléchargement ou de la copie d'objets.
Notes d'utilisation
Avant d'exécuter l'exemple de code de cette rubrique, créez une instance OSSClient en utilisant un nom de domaine personnalisé ou le Security Token Service (STS). Pour plus d'informations, consultez la section Initialisation (SDK Android).
Contexte
La complexité des réseaux mobiles peut entraîner des erreurs lors du transfert de données entre le client et le serveur. Le SDK OSS pour Android fournit les méthodes de vérification CRC-64 et MD5 pour garantir l'intégrité des données.
Contrôle de redondance cyclique
Si vous activez la vérification CRC-64 pour la lecture de flux de données, OSS vérifie automatiquement l'intégrité des données à la fin de la lecture.
L'exemple de code suivant montre comment activer la vérification CRC-64 :
Cet exemple utilise l'opération synchrone getObject. Exécutez les opérations synchrones dans un thread secondaire.
// 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();
}
Vérification MD5
Pour vérifier que l'objet chargé via un chargement multipartie est identique au fichier local, spécifiez la valeur Content-MD5 dans la requête de chargement des parties. OSS vérifie la cohérence de la valeur MD5 pour assurer l'intégrité des données. Le chargement aboutit uniquement si le hachage MD5 de l'objet reçu par le serveur OSS correspond à la valeur Content-MD5. Cette méthode garantit la cohérence de l'objet chargé.
L'exemple de code suivant montre comment activer la vérification MD5 :
// 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());
}
}
});
Références
Pour plus d'informations sur l'initialisation d'une instance OSSClient, consultez la section Initialisation.