本文介绍如何利用Java API操做阿里云OSS对象存储。html
首先介绍一下阿里云OSS对象存储的一些基本概念。java
登陆阿里云帐号,进入对象存储界面,如图所示。浏览器
进入后如图所示。bash
这里不过多介绍如何在阿里云上传下载文件,这些操做基本上点一点都能找到。dom
Bucket实质就是阿里云OSS对象存储的一个存储空间,按照计算机理解的话能够理解为一个磁盘(不知道这样比喻是否恰当)。阿里云
建立桶的过程很简单,如图所示,填写对应内容便可。url
这里须要注意,不一样分区的Endpoint是不一样的,Endpoint在后续API使用过程当中会用到。至于存储类型和读写权限相关设置,都结合自身状况来使用,这里以标准存储和私有权限为例进行介绍。spa
AccessKey是访问阿里云API的秘钥,这里也须要提早建立一份,建立后咱们须要记住本身的AccessKey ID和Access Key Secret,若是忘记能够在如图位置查询。.net
通常使用对象存储无非就是上传和下载文件,完整API地址以下:3d
Java使用很简单,直接在Maven中引用依赖,以下:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
复制代码
这里就须要用到咱们上面提到的endpoint和AccessKey,构建实例内容以下所示。
// Endpoint以杭州为例,其它Region请按实际状况填写。
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
// 使用刚刚建立的accessKeyId和accessKeySecret
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 建立OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
//todo 对OSS进行操做
// 关闭OSSClient。
ossClient.shutdown();
复制代码
上传文件经常使用的方式大体为两种,一种是返回能够查看文件的地址,另一种是经过地址能够直接下载文件。
上传文件有一些须要注意的地方:
这里先以上传本地桌面的一个图片为例,上传后在Bucket内自动建立日期格式yyyyMMdd的文件夹存放文件,文件名按照当前时间戳加随机数的形式拼接,因为返回的URL是带有签名信息的,因此这里暂时设置过时时间为一小时,若是须要能够将时间加长。
完整内容以下所示:
package com.dalaoyang.upload;
import com.aliyun.oss.OSSClient;
import java.io.File;
import java.net.URL;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
public class AliyunUpload {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
String accessKeyId = "LTAIRr3alAhROGTA";
String accessKeySecret = "******";
String fileName = "/Users/dalaoyang/Desktop/aliyun.jpeg";
String bucketName = "dalaoyang-test";
// 获取文件的后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 生成上传文件名
String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
String objectName = sdf.format(new Date()) + "/" + finalFileName;
File file = new File(fileName);
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(bucketName, objectName, file);
// 设置URL过时时间为1小时。
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
// 生成以GET方法访问的签名URL,访客能够直接经过浏览器访问相关内容。
URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
ossClient.shutdown();
System.out.println(url.toString());
}
}
复制代码
返回地址格式以下:
http://dalaoyang-test.oss-cn-beijing.aliyuncs.com/20190518/1558155342968407.jpeg?Expires=1558158948&OSSAccessKeyId=LTAIRr3alAhROGTA&Signature=%2BIjVpD%2BTWrRmSt4kU7axo6Cnqbw%3D
复制代码
浏览器访问如图所示:
在阿里云OSS中查看如图所示,能够看到文件夹也对应的建立了。
这个和上面其实相似,若是须要返回能够直接下载的地址的话,只要设置一下文件的contentDisposition为attachment;便可,完整内容以下:
package com.dalaoyang.upload;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import java.io.File;
import java.net.URL;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
public class AliyunUpload {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
String accessKeyId = "LTAIRr3alAhROGTA";
String accessKeySecret = "******";
String fileName = "/Users/dalaoyang/Desktop/WechatIMG4.png";
String bucketName = "dalaoyang-test";
// 获取文件的后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 生成上传文件名
String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
String objectName = sdf.format(new Date()) + "/" + finalFileName;
File file = new File(fileName);
ObjectMetadata meta = new ObjectMetadata();
meta.setContentDisposition("attachment;");
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(bucketName, objectName, file, meta);
// 设置URL过时时间为1小时。
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
// 生成以GET方法访问的签名URL,访客能够直接经过浏览器访问相关内容。
URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
ossClient.shutdown();
System.out.println(url.toString());
}
}
复制代码
此次返回的地址在浏览器访问直接下载下来了文件。
对于阿里云OSS操做仍是有不少玩法的,好比上传下载带进度条,分段上传等等,须要的话能够根据场景去玩。