本文介紹如何利用Java API操作阿里云OSS對(duì)象存儲(chǔ)。
1.控制臺(tái)操作
首先介紹一下阿里云OSS對(duì)象存儲(chǔ)的一些基本概念。
1.1 進(jìn)入對(duì)象存儲(chǔ)界面
登錄阿里云賬號(hào)肠套,進(jìn)入對(duì)象存儲(chǔ)界面栗柒,如圖所示。
進(jìn)入后如圖所示呀伙。
1.2 OSS基本概念
這里不過(guò)多介紹如何在阿里云上傳下載文件补履,這些操作基本上點(diǎn)一點(diǎn)都能找到。
1.2.1 Bucket
Bucket實(shí)質(zhì)就是阿里云OSS對(duì)象存儲(chǔ)的一個(gè)存儲(chǔ)空間剿另,按照計(jì)算機(jī)理解的話可以理解為一個(gè)磁盤(pán)(不知道這樣比喻是否恰當(dāng))箫锤。
創(chuàng)建桶的過(guò)程很簡(jiǎn)單,如圖所示雨女,填寫(xiě)對(duì)應(yīng)內(nèi)容即可谚攒。
這里需要注意,不同分區(qū)的Endpoint是不同的氛堕,Endpoint在后續(xù)API使用過(guò)程中會(huì)用到馏臭。至于存儲(chǔ)類型和讀寫(xiě)權(quán)限相關(guān)設(shè)置,都結(jié)合自身情況來(lái)使用讼稚,這里以標(biāo)準(zhǔn)存儲(chǔ)和私有權(quán)限為例進(jìn)行介紹括儒。
1.2.2 AccessKey
AccessKey是訪問(wèn)阿里云API的秘鑰浪耘,這里也需要提前創(chuàng)建一份,創(chuàng)建后我們需要記住自己的AccessKey ID和Access Key Secret塑崖,如果忘記可以在如圖位置查詢七冲。
2 API使用
2.1 API地址
一般使用對(duì)象存儲(chǔ)無(wú)非就是上傳和下載文件,完整API地址如下:
https://help.aliyun.com/document_detail/32015.html?spm=5176.8466032.bucket-object.1.33ac1450TuX65y
2.2 API使用準(zhǔn)備
Java使用很簡(jiǎn)單规婆,直接在Maven中引用依賴澜躺,如下:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
2.3 構(gòu)建OSSClient實(shí)例
這里就需要用到我們上面提到的endpoint和AccessKey,構(gòu)建實(shí)例內(nèi)容如下所示抒蚜。
// Endpoint以杭州為例掘鄙,其它Region請(qǐng)按實(shí)際情況填寫(xiě)。
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
// 使用剛剛創(chuàng)建的accessKeyId和accessKeySecret
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 創(chuàng)建OSSClient實(shí)例嗡髓。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
//todo 對(duì)OSS進(jìn)行操作
// 關(guān)閉OSSClient操漠。
ossClient.shutdown();
2.4 上傳文件
上傳文件常用的方式大致為兩種,一種是返回可以查看文件的地址饿这,另外一種是通過(guò)地址可以直接下載文件浊伙。
2.4.1 上傳文件,返回可以預(yù)覽圖片的地址
上傳文件有一些需要注意的地方:
- 1.文件名不要重復(fù)长捧,不然會(huì)覆蓋嚣鄙。
- 2.建議將不同日期的文件分別創(chuàng)建一個(gè)文件夾方便區(qū)分。
這里先以上傳本地桌面的一個(gè)圖片為例串结,上傳后在Bucket內(nèi)自動(dòng)創(chuàng)建日期格式y(tǒng)yyyMMdd的文件夾存放文件哑子,文件名按照當(dāng)前時(shí)間戳加隨機(jī)數(shù)的形式拼接,由于返回的URL是帶有簽名信息的肌割,所以這里暫時(shí)設(shè)置過(guò)期時(shí)間為一小時(shí)卧蜓,如果需要可以將時(shí)間加長(zhǎng)。
完整內(nèi)容如下所示:
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);
// 設(shè)置URL過(guò)期時(shí)間為1小時(shí)把敞。
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
// 生成以GET方法訪問(wèn)的簽名URL弥奸,訪客可以直接通過(guò)瀏覽器訪問(wèn)相關(guān)內(nèi)容。
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
瀏覽器訪問(wèn)如圖所示:
在阿里云OSS中查看如圖所示先巴,可以看到文件夾也對(duì)應(yīng)的創(chuàng)建了其爵。
2.4.2 上傳文件冒冬,返回可以直接下載圖片的地址
這個(gè)和上面其實(shí)類似伸蚯,如果需要返回可以直接下載的地址的話,只要設(shè)置一下文件的contentDisposition為attachment;即可简烤,完整內(nèi)容如下:
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);
// 設(shè)置URL過(guò)期時(shí)間為1小時(shí)剂邮。
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
// 生成以GET方法訪問(wèn)的簽名URL,訪客可以直接通過(guò)瀏覽器訪問(wèn)相關(guān)內(nèi)容横侦。
URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
ossClient.shutdown();
System.out.println(url.toString());
}
}
這次返回的地址在瀏覽器訪問(wèn)直接下載下來(lái)了文件挥萌。
3 小結(jié)
對(duì)于阿里云OSS操作還是有很多玩法的绰姻,比如上傳下載帶進(jìn)度條,分段上傳等等引瀑,需要的話可以根據(jù)場(chǎng)景去玩狂芋。