【第三方服务】网易云对象存储使用笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loy_184548/article/details/81907973

网易云对象存储使用笔记


官方文档:here
实际上官方文档写的已经很清楚了,这里再简单记录一下,需要注意的是:

  • 网易云桶中文件名(key值) 需要文件后缀,如果不带文件后缀,文件下载无法打开

一、网易云对象存储

网易对象存储为用户提供基于互联网的数据存取服务,通过使用 NOS,用户可以随时通过网络将文本、图片、音视频等各类文件存储到 NOS 系统中,并随时可以通过网络进行安全访问

1. 概念

  • 桶: NOS 的对象容器,所有的对象必须放入桶中,桶名称 NOS 全局唯一,桶内Key唯一
  • key:每个对象拥有桶内唯一的 key,类比于文件名,key 由用户自定义,对象 存取接口通过 key 来操作

2. 初始化

a. MAVEN

<dependency>
<groupId>com.netease.cloud</groupId>
<artifactId>nos-sdk-java-publiccloud</artifactId>
<version>0.0.4</version>
</dependency>

b. 获取密钥对

注册账户,获取ACCESS_KEY以及SECRET_KEY

c. 实例化 NosClient

// 初始化
Credentials credentials = new BasicCredentials(ACCESS_KEY, SECRET_KEY);
NosClient nosClient = new NosClient(credentials);

// 初始化TransferManager
TransferManager transferManager = new TransferManager(nosClient);

3. 桶管理

a. 创建桶

注意桶的权限:

  • 私有:读写桶内资源需要通过认证
  • 公开:所有人均可访问该桶资源,但是写数据仍然需要通过认证
// createBucket
// 入参 bucketName 桶名
// 桶名为全局唯一,需先判断桶名是否已经存在
boolean exists = nosClient.doesBucketExist(bucketName);
if (exists == true){
    baseResult.returnWithoutValue(Code.BUCKET_EXIST);
    return baseResult;
}
//设置你要创建桶的名称
CreateBucketRequest request = new CreateBucketRequest(bucketName);
//设置桶的权限,如果不设置,默认为Private
request.setCannedAcl(CannedAccessControlList.PublicRead);
nosClient.createBucket(request);

b. 列举桶

 ArrayList bucketList = new ArrayList();
 for (Bucket bucket : nosClient.listBuckets()) {
    bucketList.add(bucket.getName());
 }

c. 删除桶

nosClient.deleteBucket(bucketName);

4. 文件管理

a. 上传文件

方式一: 通过MultipartFile上传文件

// 先判断文件是否已经存在,如果已经存在再次上传会覆盖原来的文件
// 将MultipartFile转为File
File file = changeFile(multipartFile);
InputStream inputStream = new FileInputStream(file);
//流式上传文件
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(file.length());
objectMetadata.setContentType(multipartFile.getContentType());
Upload upload = transferManager.upload(bucketName, objectName, inputStream, objectMetadata);
UploadResult result = upload.waitForUploadResult();
//如果不需要File文件可删除
if (file.exists()) {  file.delete(); }

// 转换文件方法
private File changeFile(MultipartFile multipartFile) {
    // 获取文件名
    String fileName = multipartFile.getOriginalFilename();
    // 获取文件后缀
    String prefix = fileName.substring(fileName.lastIndexOf("."));
    // todo 修改临时文件文件名
    File file = File.createTempFile(fileName, prefix);
    // MultipartFile to File
    multipartFile.transferTo(file);
    return file;
}

方式二:通过实际路径上传文件

nosClient.putObject(bucketName,objectName, new File(url));

b. 获取文件URL

// OVERDUE_DATE = 3600 * 1000 * 24 * 365;
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectName);
//设置可下载URL的过期时间,默认过期时间为1天
generatePresignedUrlRequest.setExpiration(new Date(System.currentTimeMillis() + OVERDUE_DATE));
URL url = nosClient.generatePresignedUrl(generatePresignedUrlRequest);

c. 删除文件

nosClient.deleteObject(bucketName,objectName);

d. 获取文件列表

// 根据桶名获取桶内文件列表
ObjectListing objectListing = nosClient.listObjects(bucketName);
List<NOSObjectSummary> sums = objectListing.getObjectSummaries();

e. 重命名文件

nosClient.moveObject(bucketName, oldName, bucketName, newName);

猜你喜欢

转载自blog.csdn.net/loy_184548/article/details/81907973