使用阿里雲OSS上傳文件

本文介紹如何利用Java API操做阿里雲OSS對象存儲。html

1.控制檯操做

首先介紹一下阿里雲OSS對象存儲的一些基本概念。java

1.1 進入對象存儲界面

登陸阿里雲帳號,進入對象存儲界面,如圖所示。瀏覽器

進入後如圖所示。bash

1.2 OSS基本概念

這裏不過多介紹如何在阿里雲上傳下載文件,這些操做基本上點一點都能找到。dom

1.2.1 Bucket

Bucket實質就是阿里雲OSS對象存儲的一個存儲空間,按照計算機理解的話能夠理解爲一個磁盤(不知道這樣比喻是否恰當)。阿里雲

建立桶的過程很簡單,如圖所示,填寫對應內容便可。url

這裏須要注意,不一樣分區的Endpoint是不一樣的,Endpoint在後續API使用過程當中會用到。至於存儲類型和讀寫權限相關設置,都結合自身狀況來使用,這裏以標準存儲和私有權限爲例進行介紹。spa

1.2.2 AccessKey

AccessKey是訪問阿里雲API的祕鑰,這裏也須要提早建立一份,建立後咱們須要記住本身的AccessKey ID和Access Key Secret,若是忘記能夠在如圖位置查詢。.net

2 API使用

2.1 API地址

通常使用對象存儲無非就是上傳和下載文件,完整API地址以下:3d

help.aliyun.com/document_de…

2.2 API使用準備

Java使用很簡單,直接在Maven中引用依賴,以下:

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>2.8.3</version>
</dependency>
複製代碼

2.3 構建OSSClient實例

這裏就須要用到咱們上面提到的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();
複製代碼

2.4 上傳文件

上傳文件經常使用的方式大體爲兩種,一種是返回能夠查看文件的地址,另一種是經過地址能夠直接下載文件。

2.4.1 上傳文件,返回能夠預覽圖片的地址

上傳文件有一些須要注意的地方:

  • 1.文件名不要重複,否則會覆蓋。
  • 2.建議將不一樣日期的文件分別建立一個文件夾方便區分。

這裏先以上傳本地桌面的一個圖片爲例,上傳後在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中查看如圖所示,能夠看到文件夾也對應的建立了。

2.4.2 上傳文件,返回能夠直接下載圖片的地址

這個和上面其實相似,若是須要返回能夠直接下載的地址的話,只要設置一下文件的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());
    }
}

複製代碼

此次返回的地址在瀏覽器訪問直接下載下來了文件。

3 小結

對於阿里雲OSS操做仍是有不少玩法的,好比上傳下載帶進度條,分段上傳等等,須要的話能夠根據場景去玩。

相關文章
相關標籤/搜索