阿里雲oss 使用, 基於Nginx 配置雲服務器+oss的內網訪問 , 及使用Java SDK 完成上傳,下載,刪除,查詢文件列表操作

一、同阿里產品,雲服務器和存儲對象oss-配置內網訪問

阿里存儲對象oss 地址: https://oss.console.aliyun.com/overview

配置須知

通過Nginx 進行網絡轉發,安裝Nginx 教程: https://blog.csdn.net/qq_41463655/article/details/100580572

注意: 服務器與存儲對象需在同一個區下,如下示例
存儲對象oss
在這裏插入圖片描述
雲服務器 --> ECS 和 輕量級雲服務器 均支持
在這裏插入圖片描述

1、 找到 存儲對象控制檯的內網訪問地址

在這裏插入圖片描述

2、配置nginx 進行轉發(配置Nginx)

轉發到 http://Bucket 名.oss-cn-shenzhen-internal.aliyuncs.com 內網地址 ,-internal

指定服務 域名/oss  目錄轉發到存儲對象服務 oss/ 目錄下

在這裏插入圖片描述
完整配置

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /oss {
             proxy_pass  http://Bucket 名.oss-cn-shenzhen-internal.aliyuncs.com;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

3、通過Nginx 進行內網訪問測試 (免流量費)

訪問路徑展示: http://xijia.plus/oss/qs44ufe2024qs44ufe2024.jpg
在這裏插入圖片描述

3、java - sdk 使用

1、添加 Maven 依賴

       <!-- 阿里雲OSS -->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.8.0</version>
        </dependency>

2、添加自定義yml配置

添加配置
accessKeyId
accessKeySecret
endpoint
bucketName

## 阿里雲oss配置
aliyun:
  oss:
    # 阿里雲下oss 的 accessKeyId和accessKeySecret(訪問密鑰,您可以在控制檯上創建和查看)
    accessKeyId: 
    accessKeySecret: 
    # oss訪問地址, 同阿里服務器可使用內網地址免費服務
    endpoint: oss-cn-shenzhen.aliyuncs.com
    # Bucket 名稱
    bucketName: xijia-sz

3、OSSUtils 方法

/**
 * 示例說明
 * <p>
 * HelloOSS是OSS Java SDK的示例程序,您可以修改endpoint、accessKeyId、accessKeySecret、bucketName後直接運行。
 * 運行方法請參考README。
 * <p>
 * 本示例中的並不包括OSS Java SDK的所有功能,詳細功能及使用方法,請參看“SDK手冊 > Java-SDK”,
 * 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/preface.html?spm=5176.docoss/sdk/java-sdk/。
 * <p>
 * 調用OSS Java SDK的方法時,拋出異常表示有錯誤發生;沒有拋出異常表示成功執行。
 * 當錯誤發生時,OSS Java SDK的方法會拋出異常,異常中包括錯誤碼、錯誤信息,詳細請參看“SDK手冊 > Java-SDK > 異常處理”,
 * 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/exception.html?spm=5176.docoss/api-reference/error-response。
 * <p>
 * OSS控制檯可以直觀的看到您調用OSS Java SDK的結果,OSS控制檯地址是:https://oss.console.aliyun.com/index#/。
 * OSS控制檯使用方法請參看文檔中心的“控制檯用戶指南”, 指南的來鏈接地址是:https://help.aliyun.com/document_detail/oss/getting-started/get-started.html?spm=5176.docoss/user_guide。
 * <p>
 * OSS的文檔中心地址是:https://help.aliyun.com/document_detail/oss/user_guide/overview.html。
 * OSS Java SDK的文檔地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/install.html?spm=5176.docoss/sdk/java-sdk。
 */

package com.ws.ldy.common.aliyun.oss;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.ws.ldy.common.result.ResultEnum;
import com.ws.ldy.config.error.ErrorException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.InputStream;
import java.util.List;

@Slf4j
@Service
//@Order(999)
public class OSSUtils {


    /**
     * endpoint是訪問OSS的域名。如果您已經在OSS的控制檯上 創建了Bucket,請在控制檯上查看域名。
     * 上傳使用外網 endpoint
     * 下載使用內網 endpoint(只有在同地區下的阿里雲服務器纔可以訪問)
     * <p>
     * // 上傳
     * 外網流入流量免費 (上傳免費)
     * 內網流入流量免費 (上傳免費)
     * // 下載
     * 外網流出流量免費(按量計費, 閒是2.5毛 1GB,忙是 5毛1GB)
     * 內網流出流量免費(下載訪問免費,同地域阿里雲服務器可使用內網)
     */
    // 阿里雲下oss 接口訪問地址
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;

    // 阿里雲下oss 的 accessKeyId和accessKeySecret(訪問密鑰,您可以在控制檯上創建和查看)
    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;
    @Value("${aliyun.oss.accessKeySecret}")
    private String accessKeySecret;

    //阿里雲oss下bucketName
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;


    /**
     * TODO 上傳文件到oss/file 目錄下
     * <p>
     * 鏈接地址:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
     * </P>
     *
     * @param yourObjectName 表示上傳文件到OSS時需要指定包含文件後綴在內的完整路徑,例如abc/efg/123.jpg。
     * @param inputStream    文件流
     * @return
     */
    public boolean upload(String yourObjectName, InputStream inputStream) {
        // 創建ossClient
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 創建PutObjectRequest對象。
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, yourObjectName, inputStream);
        // 設置 ContentType類型,防止圖片等資源無法使用url直接訪問
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentType(getContentType(yourObjectName.substring(yourObjectName.lastIndexOf("."))));
        putObjectRequest.setMetadata(metadata);
        // 開始上傳
        ossClient.putObject(putObjectRequest);
        // 上傳成功關閉OSSClient
        //  ossClient.shutdown();
        log.info("上傳-" + yourObjectName + " 成功");
        // 關閉OSSClient。
        ossClient.shutdown();
        return true;
    }


    /**
     * TODO 從OSS 下載文件
     * <p>
     * 下載文件。詳細請參看“SDK手冊 > Java-SDK > 下載文件”。
     * 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/download_object.html?spm=5176.docoss/sdk/java-sdk/manage_object
     * </P>
     *
     * @param yourObjectName 表示上文件在OSS時包含文件後綴在內的完整路徑,例如abc/efg/123.jpg。
     * @return
     */
    public InputStream download(String yourObjectName) {
        // 創建ossClient
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        OSSObject ossObject = null;
        try {
            ossObject = ossClient.getObject(bucketName, yourObjectName);
        } catch (OSSException e) {
            e.printStackTrace();
            throw new ErrorException(ResultEnum.ADMIN_OSS_NO_PATH);
        }
        // 關閉OSSClient。
        ossClient.shutdown();
        //返回InputStream
        return ossObject.getObjectContent();
    }


    /**
     * TODO 獲取OSS 文件列表
     */
    public List<OSSObjectSummary> getObjectListing() {
        // 創建ossClient
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ObjectListing objectListing = ossClient.listObjects(bucketName);
        List<OSSObjectSummary> objectSummary = objectListing.getObjectSummaries();
//        System.out.println("您有以下Object:");
//        for (OSSObjectSummary object : objectSummary) {
//            System.out.println("\t" + object.getKey());
//        }
        // 關閉OSSClient。
        ossClient.shutdown();
        return objectSummary;
    }

    /**
     * TODO 刪除, 刪除文件夾 --> 如: file/
     */
    public boolean deleteObject(String firstKey) {
        // 創建ossClient
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.deleteObject(bucketName, firstKey);
        System.out.println("刪除Object:" + firstKey + "成功。");
        // 關閉OSSClient。
        ossClient.shutdown();
        return true;
    }


    /**
     * TODO 判斷獲取文件保存內存
     *
     * @param FilenameExtension
     * @return
     */
    public static String getContentType(String FilenameExtension) {
        if (FilenameExtension.equalsIgnoreCase(".bmp")) {
            return "image/bmp";
        }
        if (FilenameExtension.equalsIgnoreCase(".gif")) {
            return "image/gif";
        }
        if (FilenameExtension.equalsIgnoreCase(".jpeg") ||
                FilenameExtension.equalsIgnoreCase(".jpg") ||
                FilenameExtension.equalsIgnoreCase(".png")) {
            return "image/jpg";
        }
        if (FilenameExtension.equalsIgnoreCase(".html")) {
            return "text/html";
        }
        if (FilenameExtension.equalsIgnoreCase(".txt")) {
            return "text/plain";
        }
        if (FilenameExtension.equalsIgnoreCase(".vsd")) {
            return "application/vnd.visio";
        }
        if (FilenameExtension.equalsIgnoreCase(".pptx") ||
                FilenameExtension.equalsIgnoreCase(".ppt")) {
            return "application/vnd.ms-powerpoint";
        }
        if (FilenameExtension.equalsIgnoreCase(".docx") ||
                FilenameExtension.equalsIgnoreCase(".doc")) {
            return "application/msword";
        }
        if (FilenameExtension.equalsIgnoreCase(".xml")) {
            return "text/xml";
        }
        if (FilenameExtension.equalsIgnoreCase(".mp4")) {
            return "video/mp4";
        }
        if (FilenameExtension.equalsIgnoreCase(".mp3")) {
            return "audio/mp3";
        }
        return "image/jpg";
    }
}

4、controller 層方法

package com.ws.ldy.base.controller;

import com.aliyun.oss.model.OSSObjectSummary;
import com.ws.ldy.common.aliyun.oss.OSSUtils;
import com.ws.ldy.common.result.Result;
import com.ws.ldy.common.result.ResultEnum;
import com.ws.ldy.common.utils.LocalDateTimeUtils;
import com.ws.ldy.config.error.ErrorException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.List;

/**
 * TODO 阿里雲OSS 文件上傳下載
 *
 * @author peter 2018/10/20 21:32
 */
@RestController
@Api(value = "FileOSSController", tags = "文件管理--阿里雲OSS")
@RequestMapping("/ossFile")
public class FileOSSController extends BaseController {

    // 阿里雲oss工具類
    @Autowired
    private OSSUtils ossUtils;

    // 文件內網訪問域名(下載訪問,上傳)
    private final String YM_PATH = "http://xijia.plus/"; //外網: xijia-sz.oss-cn-shenzhen.aliyuncs.com

    // 文件保存路徑
    private final static String FILE_PATH = "oss/file/";

    // 文件保存路徑地址
    private final static String UPLOAD_PATH_IMAGE = "image";  //  oss/file/image
    private final static String UPLOAD_PATH_MUSIC = "music";  //  oss/file/music
    private final static String UPLOAD_PATH_VIDEO = "video";
    private final static String UPLOAD_PATH_EXCEL = "excel";


    @RequestMapping(value = "/upload", method = RequestMethod.POST) //consumes = "multipart/*", headers = "content-type=multipart/form-data"
    @ApiOperation("OSS-文件上傳,返回完整可訪問當前服務內網訪問OSS的完整URL")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "filePath", value = "文件路徑,必須指定開頭目錄(image/ -圖片, music/ -音樂,video/ -視頻,excel/ -表格)", required = true)
    })
    public Result<String> uploadImage(@RequestParam("file") MultipartFile file, @RequestParam("filePath") String filePath) {
        // 驗證文件格式及路徑,並獲取文件上傳路徑, file.getOriginalFilename()=原文件名
        String fileName = getPath(filePath, file.getOriginalFilename());
        try {
            // 獲得上傳的文件流
            InputStream inputStream = file.getInputStream();
            // 上傳到OSS的路徑 = ObjectKey
            String path = FILE_PATH + filePath + fileName;
            ossUtils.upload(path, inputStream);
            // 返回內網訪問地址(域名+ oss存儲路徑)
            return Result.success(YM_PATH + path);
        } catch (Exception e) {
            return Result.error(ResultEnum.SYS_ERROR.getCode(), "文件上傳失敗");
        }
    }


    /**
     * TODO 文件下載
     *
     * @param filePath 文件路徑
     */
    @ApiOperation("OSS-文件下載")
    @ApiImplicitParam(name = "filePath", value = "文件保存的完整可訪問URL,或OSS相對路徑", required = true)
    @RequestMapping(value = "/download", method = RequestMethod.GET)
    public void download(@RequestParam String filePath) {
        // 去除域名 ,獲得oss存儲路徑
        filePath = filePath.replace(YM_PATH, "");
        // 獲取文件名稱
        String fileName = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.length());
        // 從oss獲取文件流
        InputStream inputStream = ossUtils.download(filePath);
        try {
            // 下載
            BufferedInputStream in = new BufferedInputStream(inputStream);
            // 設置response的Header
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes()));
            response.setContentType("application/octet-stream");
            response.setHeader("content-type", "application/octet-stream");
            // 放入outputStream流
            OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
            byte[] buffer = new byte[1024];
            int len = 0;
            int i = 0;
            while ((len = in.read(buffer)) > 0) {
                i = i + len;
                outputStream.write(buffer, 0, len);
            }
            //最後的內容
            outputStream.write(buffer);
            //響應返回字節長度-無效:response.addHeader("Content-Length", "" + i);//  System.out.println(i);
            outputStream.flush();
            outputStream.close();
        } catch (IOException ex) {
            ex.printStackTrace();
            throw new ErrorException(ResultEnum.SYS_ERROR.getCode(), "文件下載失敗");
        }
    }


    /**
     * TODO oss-文件列表
     */
    @ApiOperation("OSS-文件Object列表")
    @RequestMapping(value = "/fileList", method = RequestMethod.GET)
    public Result<List<OSSObjectSummary>> fileList() {
        List<OSSObjectSummary> objectListing = ossUtils.getObjectListing();
        return Result.success(objectListing);
    }


    /**
     * TODO oss-文件刪除
     */
    @ApiOperation("OSS-文件刪除")
    @ApiImplicitParam(name = "filePath", value = "文件保存的完整可訪問URL,或OSS相對路徑", required = true)
    @RequestMapping(value = "/del", method = RequestMethod.DELETE)
    public Result del(@RequestParam String filePath) {
        // 去除域名 ,獲得oss存儲路徑
        filePath = filePath.replace(YM_PATH, "");
        ossUtils.deleteObject(filePath);
        return Result.success();
    }


    /**
     * 上傳路徑文件格式判斷
     *
     * @param filePath 文件上傳路徑
     * @param fileName 文件名稱
     * @return fileName
     */
    private String getPath(String filePath, String fileName) {
        if (filePath.lastIndexOf("/") != filePath.length() - 1) {
            throw new ErrorException(100000, "路徑必須已[/]結尾");
        }
        // 目錄開頭
        String[] path = filePath.split("/");
        // 後綴名
        String suffixName = fileName.substring(fileName.indexOf(".") + 1, fileName.length());
        if (UPLOAD_PATH_IMAGE.equals(path[0])) {
            // 圖片
            if (!"jpg".equals(suffixName) && !"png".equals(suffixName)) {
                throw new ErrorException(100001, "圖片僅支持上傳-[jpg,png]");
            }
            //修改fileName的引用,提交17位時間+3位隨機數(20前綴)
            fileName = LocalDateTimeUtils.getTimeStr20() + "-" + fileName;
            // filePath = filePath.replace(suffixName, "") + UUIDUtil.creatUUID() + "-";
        } else if (UPLOAD_PATH_MUSIC.equals(path[0])) {
            // 音樂
            if (!"mp3".equals(suffixName)) {
                throw new ErrorException(100002, "音樂僅支持上傳-[mp3]");
            }
        } else if (UPLOAD_PATH_VIDEO.equals(path[0])) {
            // 視頻
            if (!"mp4".equals(suffixName)) {
                throw new ErrorException(100003, "視頻僅支持上傳-[mp4]");
            }
        } else if (UPLOAD_PATH_EXCEL.equals(path[0])) {
            //excel
            if (!"xlsx".equals(suffixName) && !"xls".equals(suffixName)) {
                throw new ErrorException(100004, "EXCEL僅支持上傳-[xlxs,xlx]");
            }
        } else {
            throw new ErrorException(100005, "路徑錯誤");
        }
        return fileName;
    }
}

5、swaager展示

注意: 使用接口刪除文件夾,內文件必須爲空,使用文件夾名上/, 如: file/
在這裏插入圖片描述

6、官方提供的示例Demo,HelloOSS.java

/**
 * 示例說明
 * 
 * HelloOSS是OSS Java SDK的示例程序,您可以修改endpoint、accessKeyId、accessKeySecret、bucketName後直接運行。
 * 運行方法請參考README。
 * 
 * 本示例中的並不包括OSS Java SDK的所有功能,詳細功能及使用方法,請參看“SDK手冊 > Java-SDK”,
 * 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/preface.html?spm=5176.docoss/sdk/java-sdk/。
 * 
 * 調用OSS Java SDK的方法時,拋出異常表示有錯誤發生;沒有拋出異常表示成功執行。
 * 當錯誤發生時,OSS Java SDK的方法會拋出異常,異常中包括錯誤碼、錯誤信息,詳細請參看“SDK手冊 > Java-SDK > 異常處理”,
 * 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/exception.html?spm=5176.docoss/api-reference/error-response。
 * 
 * OSS控制檯可以直觀的看到您調用OSS Java SDK的結果,OSS控制檯地址是:https://oss.console.aliyun.com/index#/。
 * OSS控制檯使用方法請參看文檔中心的“控制檯用戶指南”, 指南的來鏈接地址是:https://help.aliyun.com/document_detail/oss/getting-started/get-started.html?spm=5176.docoss/user_guide。
 * 
 * OSS的文檔中心地址是:https://help.aliyun.com/document_detail/oss/user_guide/overview.html。
 * OSS Java SDK的文檔地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/install.html?spm=5176.docoss/sdk/java-sdk。
 * 
 */

package com.aliyun.oss.demo;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.BucketInfo;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import java.io.*;
import java.util.List;

public class HelloOSS {
    static Logger logger = Logger.getLogger(HelloOSS.class);

    // endpoint是訪問OSS的域名。如果您已經在OSS的控制檯上 創建了Bucket,請在控制檯上查看域名。
    // 如果您還沒有創建Bucket,endpoint選擇請參看文檔中心的“開發人員指南 > 基本概念 > 訪問域名”,
    // 鏈接地址是:https://help.aliyun.com/document_detail/oss/user_guide/oss_concept/endpoint.html?spm=5176.docoss/user_guide/endpoint_region
    // endpoint的格式形如“http://oss-cn-hangzhou.aliyuncs.com/”,注意http://後不帶bucket名稱,
    // 比如“http://bucket-name.oss-cn-hangzhou.aliyuncs.com”,是錯誤的endpoint,請去掉其中的“bucket-name”。
    private static String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";

    // accessKeyId和accessKeySecret是OSS的訪問密鑰,您可以在控制檯上創建和查看,
    // 創建和查看訪問密鑰的鏈接地址是:https://ak-console.aliyun.com/#/。
    // 注意:accessKeyId和accessKeySecret前後都沒有空格,從控制檯複製時請檢查並去除多餘的空格。
    private static String accessKeyId = "<yourAccessKeyId>";
    private static String accessKeySecret = "<yourAccessKeySecret>";

    // Bucket用來管理所存儲Object的存儲空間,詳細描述請參看“開發人員指南 > 基本概念 > OSS基本概念介紹”。
    // Bucket命名規範如下:只能包括小寫字母,數字和短橫線(-),必須以小寫字母或者數字開頭,長度必須在3-63字節之間。
    private static String bucketName = "<yourBucketName>";

    // Object是OSS存儲數據的基本單元,稱爲OSS的對象,也被稱爲OSS的文件。詳細描述請參看“開發人員指南 > 基本概念 > OSS基本概念介紹”。
    // Object命名規範如下:使用UTF-8編碼,長度必須在1-1023字節之間,不能以“/”或者“\”字符開頭。
    private static String firstKey = "my-first-key";

    public static void main(String[] args) {

        // 日誌配置,OSS Java SDK使用log4j記錄錯誤信息。示例程序會在工程目錄下生成“oss-demo.log”日誌文件,默認日誌級別是INFO。
        // 日誌的配置文件是“conf/log4j.properties”,如果您不需要日誌,可以沒有日誌配置文件和下面的日誌配置。
        PropertyConfigurator.configure("conf/log4j.properties");

        logger.info("Started");

        // 生成OSSClient,您可以指定一些參數,詳見“SDK手冊 > Java-SDK > 初始化”,
        // 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/init.html?spm=5176.docoss/sdk/java-sdk/get-start
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {

            // 判斷Bucket是否存在。詳細請參看“SDK手冊 > Java-SDK > 管理Bucket”。
            // 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
            if (ossClient.doesBucketExist(bucketName)) {
                System.out.println("您已經創建Bucket:" + bucketName + "。");
            } else {
                System.out.println("您的Bucket不存在,創建Bucket:" + bucketName + "。");
                // 創建Bucket。詳細請參看“SDK手冊 > Java-SDK > 管理Bucket”。
                // 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
                ossClient.createBucket(bucketName);
            }

            // 查看Bucket信息。詳細請參看“SDK手冊 > Java-SDK > 管理Bucket”。
            // 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
            BucketInfo info = ossClient.getBucketInfo(bucketName);
            System.out.println("Bucket " + bucketName + "的信息如下:");
            System.out.println("\t數據中心:" + info.getBucket().getLocation());
            System.out.println("\t創建時間:" + info.getBucket().getCreationDate());
            System.out.println("\t用戶標誌:" + info.getBucket().getOwner());

            // 把字符串存入OSS,Object的名稱爲firstKey。詳細請參看“SDK手冊 > Java-SDK > 上傳文件”。
            // 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
            InputStream is = new ByteArrayInputStream("Hello OSS".getBytes());
            ossClient.putObject(bucketName, firstKey, is);
            System.out.println("Object:" + firstKey + "存入OSS成功。");

            // 下載文件。詳細請參看“SDK手冊 > Java-SDK > 下載文件”。
            // 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/download_object.html?spm=5176.docoss/sdk/java-sdk/manage_object
            OSSObject ossObject = ossClient.getObject(bucketName, firstKey);
            InputStream inputStream = ossObject.getObjectContent();
            StringBuilder objectContent = new StringBuilder();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            while (true) {
                String line = reader.readLine();
                if (line == null)
                    break;
                objectContent.append(line);
            }
            inputStream.close();
            System.out.println("Object:" + firstKey + "的內容是:" + objectContent);

            // 文件存儲入OSS,Object的名稱爲fileKey。詳細請參看“SDK手冊 > Java-SDK > 上傳文件”。
            // 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
            String fileKey = "README.md";
            ossClient.putObject(bucketName, fileKey, new File("README.md"));
            System.out.println("Object:" + fileKey + "存入OSS成功。");

            // 查看Bucket中的Object。詳細請參看“SDK手冊 > Java-SDK > 管理文件”。
            // 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
            ObjectListing objectListing = ossClient.listObjects(bucketName);
            List<OSSObjectSummary> objectSummary = objectListing.getObjectSummaries();
            System.out.println("您有以下Object:");
            for (OSSObjectSummary object : objectSummary) {
                System.out.println("\t" + object.getKey());
            }

            // 刪除Object。詳細請參看“SDK手冊 > Java-SDK > 管理文件”。
            // 鏈接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
            ossClient.deleteObject(bucketName, firstKey);
            System.out.println("刪除Object:" + firstKey + "成功。");
            ossClient.deleteObject(bucketName, fileKey);
            System.out.println("刪除Object:" + fileKey + "成功。");

        } catch (OSSException oe) {
            oe.printStackTrace();
        } catch (ClientException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
        }

        logger.info("Completed");
    }

}

本文到此結束,如果覺得有用,動動小手點贊或關注一下唄,將不定時持續更新更多的內容…,感謝大家的觀看!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章