系列文章目录
第一章 上传云对象存储代码实践-华为云OBS
第二章 上传云对象存储代码实践-阿里云OSS
第三章 上传云对象存储代码实践-百度云
前言
前2章已经介绍阿里云和华为云的对象存储,再说说百度云,科普一下
百度云是什么
百度云(现更名为百度网盘)是百度推出的一项云存储服务,提供文件存储、同步、管理和分享功能。支持多终端(网页、PC客户端、手机App)访问,用户可上传照片、视频、文档等文件至云端,并通过链接分享给他人。
核心功能
- 文件备份与存储:支持自动备份手机照片、视频等,提供2TB免费存储空间(需完成初始任务)。
- 文件分享:生成公开或加密链接,设置有效期(如7天、永久等)。
- 多端同步:在手机、电脑、平板等设备间实时同步文件。
- 在线预览:直接查看文档、图片、视频(无需下载)。
会员服务
- 免费版:基础存储空间,下载限速。
- 会员/超级会员:提升存储容量(如5TB~16TB)、加速下载、文件解压等特权。
常见问题
- 下载速度慢:非会员下载受限,可通过会员或闲时下载缓解。
- 文件失效:分享链接可能因违规内容被系统屏蔽。
如需进一步操作(如大文件传输或团队协作),可结合百度网盘企业版使用。
使用步骤和代码实践
-
登录百度云api官网
-
在控制台搜索 对象存储,进入后,开通服务,找到ak入口,点击进入

-
提示有风险,继续用主账号,创建access key

-
手机短信验证通过后,下载ak文件,妥善保存

-
代码实现,这里是java代码。先构建一个client, 参考初始化 ,可以通过传入ENDPOINT参数来指定不同地域的BOS官方域名,不指定时默认为北京区域http://bj.bcebos.com。
public class Sample {
public static void main(String[] args) {
String ACCESS_KEY_ID = <your-access-key-id>; // 用户的Access Key ID
String SECRET_ACCESS_KEY = <your-secret-access-key>; // 用户的Secret Access Key
String ENDPOINT = <domain-name>; // 用户自己指定地域的官方域名
// 初始化一个BosClient
BosClientConfiguration config = new BosClientConfiguration();
config.setCredentials(new DefaultBceCredentials(ACCESS_KEY_ID, SECRET_ACCESS_KEY));
config.setEndpoint(ENDPOINT);
BosClient client = new BosClient(config);
}
}
- 简单上传代码, BOS在简单上传的场景中,支持以指定文件形式、以数据流方式、以二进制串方式、以字符串方式执行Object上传,请参考如下代码
public void PutObject(BosClient client, String bucketName, String objectKey, byte[] byte1, String string1){
// 获取指定文件
File file = new File("/path/to/file.zip");
// 获取数据流
InputStream inputStream = new FileInputStream("/path/to/test.zip");
// 以文件形式上传Object
PutObjectResponse putObjectFromFileResponse = client.putObject(bucketName, objectKey, file);
// 以数据流形式上传Object
PutObjectResponse putObjectResponseFromInputStream = client.putObject(bucketName, objectKey, inputStream);
// 以二进制串上传Object
PutObjectResponse putObjectResponseFromByte = client.putObject(bucketName, objectKey, byte1);
// 以字符串上传Object
PutObjectResponse putObjectResponseFromString = client.putObject(bucketName, objectKey, string1);
// 创建空目录,objectKey需要以正斜线结尾,例如test/
// BOS控制台默认会将以正斜线(/)结尾的对象,作为文件目录的形式展示
PutObjectResponse putObjectResponseFromString = client.putObject(bucketName, objectKey, "");
// 打印ETag
System.out.println(putObjectFromFileResponse.getETag());
}
- 分块上传, 之前看过阿里云和华为云这块的介绍,也不错,但是再看百度云分块上传介绍,更清晰
除了通过简单上传及追加上传方式将文上传到BOS以外,BOS还提供了另外一种上传模式 —— Multipart Upload。用户可以在如下的应用场景内(但不仅限于此),使用Multipart Upload上传模式,如:
需要支持断点上传。
上传超过5GB大小的文件。
网络条件较差,和BOS的服务器之间的连接经常断开。
需要流式地上传文件。
上传文件之前,无法确定上传文件的大小。
// 开始Multipart Upload
InitiateMultipartUploadRequest initiateMultipartUploadRequest =
new InitiateMultipartUploadRequest(bucketName, objectKey);
InitiateMultipartUploadResponse initiateMultipartUploadResponse =
client.initiateMultipartUpload(initiateMultipartUploadRequest);
// 打印UploadId
System.out.println("UploadId: " + initiateMultipartUploadResponse.getUploadId());
// 初始化低频存储的一个分块上传事件
public void putMultiUploadStorageClass(){
InitiateMultipartUploadRequest iniReq = new InitiateMultipartUploadRequest(bucketName, key);
iniReq.withStorageClass(BosClient.STORAGE_CLASS_STANDARD_IA);
client.initiateMultipartUpload(iniReq);
}
// 接着,把文件分块上传。
// 设置每块为 5MB
final long partSize = 1024 * 1024 * 5L;
File partFile = new File("/path/to/file.zip");
// 计算分块数目
int partCount = (int) (partFile.length() / partSize);
if (partFile.length() % partSize != 0){
partCount++;
}
// 新建一个List保存每个分块上传后的ETag和PartNumber
List<PartETag> partETags = new ArrayList<PartETag>();
for(int i = 0; i < partCount; i++){
// 获取文件流
FileInputStream fis = new FileInputStream(partFile);
// 跳到每个分块的开头
long skipBytes = partSize * i;
fis.skip(skipBytes);
// 计算每个分块的大小
long size = partSize < partFile.length() - skipBytes ?
partSize : partFile.length() - skipBytes;
// 创建UploadPartRequest,上传分块
UploadPartRequest uploadPartRequest = new UploadPartRequest();
uploadPartRequest.setBucketName(bucketName);
uploadPartRequest.setKey(objectKey);
uploadPartRequest.setUploadId(initiateMultipartUploadResponse.getUploadId());
uploadPartRequest.setInputStream(fis);
uploadPartRequest.setPartSize(size);
uploadPartRequest.setPartNumber(i + 1);
UploadPartResponse uploadPartResponse = client.uploadPart(uploadPartRequest);
// 将返回的PartETag保存到List中。
partETags.add(uploadPartResponse.getPartETag());
// 关闭文件
fis.close();
}
CompleteMultipartUploadRequest completeMultipartUploadRequest =
new CompleteMultipartUploadRequest(bucketName, objectKey, initiateMultipartUploadResponse.getUploadId(), partETags);
// 完成分块上传
CompleteMultipartUploadResponse completeMultipartUploadResponse =
client.completeMultipartUpload(completeMultipartUploadRequest);
// 打印Object的ETag
System.out.println(completeMultipartUploadResponse.getETag());
- 封装分块上传
在Java SDK中,Bos为用户提供了putSuperObjectFromFile接口,它对分块上传涉及到的initiateMultipartUpload、UploadPart、completeMultipartUpload三个方法进行封装,用户只需调用该接口即可完成分块上传
File file = new File("/path/to/file.zip");
PutSuperObjectRequest request = new PutSuperObjectRequest(bucketName, objectKey, file);
bosClient.putSuperObjectFromFile(request);
532

被折叠的 条评论
为什么被折叠?



