更新时间:2026-08-14 GMT+08:00
上传时使用md5校验文件一致性
您可以通过以下接口在上传时使用md5校验文件一致性:
示例代码一:文件上传
本示例用于通过ObsClient.base64Md5来直接计算Content-MD5头域,将本地文件localimage.jpg上传到examplebucket桶下的objectname对象中。
import android.util.Log;
import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.ObjectMetadata;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class PutObjectWithMD5Demo {
private static final String TAG = "PutObjectWithMD5";
public void putObjectWithMD5() {
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。
// 您可以登录访问管理控制台获取访问密钥AK/SK
String ak = System.getenv("ACCESS_KEY_ID");
String sk = System.getenv("SECRET_ACCESS_KEY_ID");
// endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
String endPoint = "https://your-endpoint";
// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
try {
// 设置对象MD5值
ObjectMetadata metadata = new ObjectMetadata();
// 使用ObsClient.base64Md5计算文件的MD5值
InputStream inputStream = new FileInputStream(new File("/sdcard/Download/localimage.jpg"));
String base64Md5 = obsClient.base64Md5(inputStream);
metadata.setContentMd5(base64Md5);
obsClient.putObject("examplebucket", "objectname", new File("/sdcard/Download/localimage.jpg"), metadata);
Log.i(TAG, "putObject successfully");
} catch (ObsException e) {
Log.e(TAG, "putObject failed");
// 请求失败,打印http状态码
Log.e(TAG, "HTTP Code:" + e.getResponseCode());
// 请求失败,打印服务端错误码
Log.e(TAG, "Error Code:" + e.getErrorCode());
// 请求失败,打印详细错误信息
Log.e(TAG, "Error Message:" + e.getErrorMessage());
// 请求失败,打印请求id
Log.e(TAG, "Request ID:" + e.getErrorRequestId());
Log.e(TAG, "Host ID:" + e.getErrorHostId());
} catch (Exception e) {
Log.e(TAG, "putObject failed");
// 其他异常信息打印
Log.e(TAG, e.getMessage());
}
}
} 示例代码二:追加上传
以下代码展示如何在使用追加上传时使用MD5校验一致性。
import android.util.Log;
import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.AppendObjectRequest;
import com.obs.services.model.AppendObjectResult;
import com.obs.services.model.ObjectMetadata;
import java.io.ByteArrayInputStream;
public class AppendObjectWithMD5Demo {
private static final String TAG = "AppendObjectWithMD5";
public void appendObjectWithMD5() {
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。
// 您可以登录访问管理控制台获取访问密钥AK/SK
String ak = System.getenv("ACCESS_KEY_ID");
String sk = System.getenv("SECRET_ACCESS_KEY_ID");
// endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
String endPoint = "https://your-endpoint";
// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
try {
String content = "Hello OBS";
// 使用OBS客户端自带的MD5计算方法
String contentMD5 = obsClient.base64Md5(new ByteArrayInputStream(content.getBytes()));
Log.i(TAG, "Content MD5 calculated: " + contentMD5);
AppendObjectRequest request = new AppendObjectRequest();
request.setBucketName("examplebucket");
request.setObjectKey("objectname");
request.setPosition(0);
// 将MD5传递给服务端校验
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentMd5(contentMD5);
request.setMetadata(metadata);
request.setInput(new ByteArrayInputStream("Hello OBS".getBytes()));
// 追加上传对象
AppendObjectResult result = obsClient.appendObject(request);
Log.i(TAG, "AppendObject successfully");
Log.i(TAG, "HTTP Code:" + result.getStatusCode());
} catch (ObsException e) {
Log.e(TAG, "AppendObject failed");
// 请求失败,打印http状态码
Log.e(TAG, "HTTP Code:" + e.getResponseCode());
// 请求失败,打印服务端错误码
Log.e(TAG, "Error Code:" + e.getErrorCode());
// 请求失败,打印详细错误信息
Log.e(TAG, "Error Message:" + e.getErrorMessage());
// 请求失败,打印请求id
Log.e(TAG, "Request ID:" + e.getErrorRequestId());
Log.e(TAG, "Host ID:" + e.getErrorHostId());
} catch (Exception e) {
Log.e(TAG, "AppendObject failed");
// 其他异常信息打印
Log.e(TAG, e.getMessage());
}
}
} 示例代码三:上传段
以下代码展示如何在上传段时使用MD5校验一致性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | import android.util.Log; import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.InitiateMultipartUploadRequest; import com.obs.services.model.InitiateMultipartUploadResult; import com.obs.services.model.UploadPartRequest; import com.obs.services.model.UploadPartResult; import java.io.File; public class UploadPartWithMD5Demo { private static final String TAG = "UploadPartWithMD5"; public void uploadPartWithMD5() { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://your-endpoint"; // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); try { // 上传段 String bucketName = "examplebucket"; String objectKey = "objectname"; String localFilePath = "/sdcard/Download/localfile"; File exampleFile = new File(localFilePath); InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(bucketName, objectKey); InitiateMultipartUploadResult initiateMultipartUploadResult = obsClient.initiateMultipartUpload(initiateMultipartUploadRequest); String uploadId = initiateMultipartUploadResult.getUploadId(); UploadPartRequest uploadPartRequest = new UploadPartRequest(bucketName, objectKey, exampleFile); uploadPartRequest.setUploadId(uploadId); // 方式一:开启自动计算上传数据的MD5 uploadPartRequest.setAttachMd5(true); uploadPartRequest.setPartNumber(1); uploadPartRequest.setPartSize(exampleFile.length()); UploadPartResult uploadPartResult = obsClient.uploadPart(uploadPartRequest); Log.i(TAG, "UploadPart successfully"); // 方式二:也可以直接设置MD5值 // String base64Md5 = obsClient.base64Md5(new FileInputStream(exampleFile)); // uploadPartRequest.setContentMd5(base64Md5); } catch (ObsException e) { Log.e(TAG, "UploadPart failed"); // 请求失败,打印http状态码 Log.e(TAG, "HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 Log.e(TAG, "Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 Log.e(TAG, "Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id Log.e(TAG, "Request ID:" + e.getErrorRequestId()); Log.e(TAG, "Host ID:" + e.getErrorHostId()); } catch (Exception e) { Log.e(TAG, "UploadPart failed"); // 其他异常信息打印 Log.e(TAG, e.getMessage()); } } } |
父主题: 校验文件一致性