阿里云-对象存储OSS(用法简介)

一、OSS简介

 最近在做毕设设计时,需要存储照片和消息提示信息。为了节约时间,并没有自己设计专用的文件存储系统,最后使用了阿里云的对象存储OSS来存储照片和消息提示信息。

阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。其数据设计持久性不低于 99.999999999%,服务设计可用性不低于 99.99%。具有与平台无关的 RESTful API 接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
摘自-阿里云对象存储 OSS介绍

 本文主要介绍在React下使用OSS上传、展示图片Java后端列举指定前缀的OSS存储文件
 本文只讲解核心部分,对于不同SDK的OSS具体用法本文不作详细介绍,其具体用法请阅读官方文档:OSS-SKD示例。
 使用OSS前需要进行跨域设置,在基础设置>跨域设置>创建规则下,进行如下设置:

阿里云-对象存储OSS(用法简介)_第1张图片
图1-1 跨域规则设置

二、React显示OSS图片

1. 引入依赖

 使用npm命令引入ali-oss依赖。

npm install ali-oss --save

2. 上传图片

 主要代码如下:


import OSS from 'ali-oss';
... ...
const client = new OSS({
     accessKeyId: ' ',
     accessKeySecret: ' ',
     bucket: '',
     region: 'oss-cn-beijing',
});
const key = 'key';
client.put(key, file);

 参考官文文档-Node.js上传本地文件示例:


let OSS = require('ali-oss')

let client = new OSS({
  region: '',
  accessKeyId: '',
  accessKeySecret: '',
  bucket: '',
});

async function put () {
  try {
    let result = await client.put('object-name', 'local-file');
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();

3. 显示图片

 将图片下载到本地并显示比较浪费内存,本文采用为OSS文件添加公共读权限,使用标签,设置src属性值直接显示图片。

  1. 如果设置了Object的权限(非default),则访问该Object时进行权限认证时 会优先判断Object的权限,而Bucket的权限设置会被忽略。
  2. 允许匿名访问时(设置了public-read或者public-read-write权限),用户可以直接通过浏览器访问,例如:
    http://bucket-name.oss-cn-beijing.aliyuncs.com/pic.jpg

 主要代码如下所示:


import OSS from 'ali-oss';
... ...
const client = new OSS({
    accessKeyId: ' ',
    accessKeySecret: ' ',
    bucket: ' ',
    region: ' ',
});
const key = 'key';
//给文件追加公共读权限
client.putACL(key, 'public-read');
const url = 'http://microservice-img-store.oss-cn-beijing.aliyuncs.com/' + key;
... ... 
//设置src属性为url


三、列举指定前缀的OSS存储文件

 本小节使用Java做为后端语言,列举指定前缀的OSS存储文件。

1. 引入依赖

 在 pom.xml 文件中引入aliyun-sdk-oss依赖。


    com.aliyun.oss
    aliyun-sdk-oss
    2.8.3

2. 核心代码

 列举包含指定前缀(prefix)的文件,主要代码如下所示:

来源于官方演示代码:[对象存储 OSS]>[SDK 示例]>[Java]> [管理文件]>列举文件


//import省略
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "";
String accessKeySecret = "";
String bucketName = "";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

// 指定前缀。
final String keyPrefix = "";

// 列举包含指定前缀的文件。默认列举100个文件。
ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withPrefix(keyPrefix));
List sums = objectListing.getObjectSummaries();
for (OSSObjectSummary s : sums) {
    System.out.println("\t" + s.getKey());
}

// 关闭OSSClient。
ossClient.shutdown();

 上述代码可以列举包含指定前缀(prefix)的文件Object值,搭配流式下载可以获取文件内容,流式下载主要代码如下所示:


// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
OSSObject ossObject = ossClient.getObject(bucketName, objectName);

// 读取文件内容。
System.out.println("Object content:");
BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));
while (true) {
    String line = reader.readLine();
    if (line == null) break;

    System.out.println("\n" + line);
}
// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
reader.close();

// 关闭OSSClient。
ossClient.shutdown();

未完待续

你可能感兴趣的:(阿里云-对象存储OSS(用法简介))