使用阿里云OSS上傳文件

本文介紹如何利用Java API操作阿里云OSS對(duì)象存儲(chǔ)。

1.控制臺(tái)操作

首先介紹一下阿里云OSS對(duì)象存儲(chǔ)的一些基本概念。

1.1 進(jìn)入對(duì)象存儲(chǔ)界面

登錄阿里云賬號(hào)肠套,進(jìn)入對(duì)象存儲(chǔ)界面栗柒,如圖所示。

image

進(jìn)入后如圖所示呀伙。

image

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)容即可谚攒。

image

這里需要注意,不同分區(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塑崖,如果忘記可以在如圖位置查詢七冲。

image

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)如圖所示:

image

在阿里云OSS中查看如圖所示先巴,可以看到文件夾也對(duì)應(yīng)的創(chuàng)建了其爵。

image

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)景去玩狂芋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市憨栽,隨后出現(xiàn)的幾起案子帜矾,更是在濱河造成了極大的恐慌,老刑警劉巖屑柔,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屡萤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡掸宛,警方通過(guò)查閱死者的電腦和手機(jī)死陆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)唧瘾,“玉大人措译,你說(shuō)我怎么就攤上這事∈涡颍” “怎么了瞳遍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)菌羽。 經(jīng)常有香客問(wèn)我掠械,道長(zhǎng),這世上最難降的妖魔是什么注祖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任猾蒂,我火速辦了婚禮,結(jié)果婚禮上是晨,老公的妹妹穿的比我還像新娘肚菠。我一直安慰自己,他們只是感情好罩缴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布蚊逢。 她就那樣靜靜地躺著,像睡著了一般箫章。 火紅的嫁衣襯著肌膚如雪烙荷。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天檬寂,我揣著相機(jī)與錄音终抽,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛昼伴,可吹牛的內(nèi)容都是我干的匾旭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼圃郊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼价涝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起持舆,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤飒泻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后吏廉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體泞遗,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年席覆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了史辙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佩伤,死狀恐怖聊倔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情生巡,我是刑警寧澤耙蔑,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站孤荣,受9級(jí)特大地震影響甸陌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盐股,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一钱豁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疯汁,春花似錦牲尺、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至溢豆,卻和暖如春蜒简,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沫换。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工臭蚁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讯赏。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓垮兑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親漱挎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子系枪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容