上传云对象存储代码实践-百度云

系列文章目录

第一章 上传云对象存储代码实践-华为云OBS
第二章 上传云对象存储代码实践-阿里云OSS
第三章 上传云对象存储代码实践-百度云



前言

前2章已经介绍阿里云和华为云的对象存储,再说说百度云,科普一下

百度云是什么

百度云(现更名为百度网盘)是百度推出的一项云存储服务,提供文件存储、同步、管理和分享功能。支持多终端(网页、PC客户端、手机App)访问,用户可上传照片、视频、文档等文件至云端,并通过链接分享给他人。

核心功能

  • 文件备份与存储:支持自动备份手机照片、视频等,提供2TB免费存储空间(需完成初始任务)。
  • 文件分享:生成公开或加密链接,设置有效期(如7天、永久等)。
  • 多端同步:在手机、电脑、平板等设备间实时同步文件。
  • 在线预览:直接查看文档、图片、视频(无需下载)。

会员服务

  • 免费版:基础存储空间,下载限速。
  • 会员/超级会员:提升存储容量(如5TB~16TB)、加速下载、文件解压等特权。

常见问题

  • 下载速度慢:非会员下载受限,可通过会员或闲时下载缓解。
  • 文件失效:分享链接可能因违规内容被系统屏蔽。

如需进一步操作(如大文件传输或团队协作),可结合百度网盘企业版使用。

使用步骤和代码实践

  1. 登录百度云api官网

  2. 在控制台搜索 对象存储,进入后,开通服务,找到ak入口,点击进入
    对象存储BOS

  3. 提示有风险,继续用主账号,创建access key
    create ak

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

  5. 代码实现,这里是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);
    }
}
  1. 简单上传代码, 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());
}
  1. 分块上传, 之前看过阿里云和华为云这块的介绍,也不错,但是再看百度云分块上传介绍,更清晰

除了通过简单上传及追加上传方式将文上传到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());

  1. 封装分块上传
    在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);

参考

百度云BOS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑞瑞绮绮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值