【OSS】工具類

 

package com.aliyun.oss.demo;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import java.util.ArrayList;
import java.util.List;

/**
 * @BelongsProject: maven-demo
 * @BelongsPackage: com.aliyun.oss.demo
 * @Author: Guoyh
 * @CreateTime: 2018-10-11 15:36
 * @Description: 拷貝文件
 */
public class CopyObjects {
    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-huhehaote.aliyuncs.com";

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

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


    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
        OSSClient ossClient = new OSSClient(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());

            /*拷貝文件*/
            String sourceBucketName = bucketName;
            String sourceObjectName = "oss-accesslog/********2018-10-10-15-00-00-0001";
            String destinationBucketName = bucketName;
            String destinationObjectName = "*****/********2018-10-10-15-00-00-0001-copy";
            ObjectMetadata objectMetadata = ossClient.getObjectMetadata(sourceBucketName, sourceObjectName);
            // 獲取被拷貝文件的大小。
            long contentLength = objectMetadata.getContentLength();

            // 設置分片大小爲10MB。
            long partSize = 1024 * 1024 * 10;

            // 計算分片總數。
            int partCount = (int) (contentLength / partSize);
            if (contentLength % partSize != 0) {
                partCount++;
            }
            System.out.println("total part count:" + partCount);

            // 初始化拷貝任務。能夠經過InitiateMultipartUploadRequest指定目標文件元信息。
            InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(destinationBucketName, destinationObjectName);
            InitiateMultipartUploadResult initiateMultipartUploadResult = ossClient.initiateMultipartUpload(initiateMultipartUploadRequest);
            String uploadId = initiateMultipartUploadResult.getUploadId();

            // 分片拷貝。
            List<PartETag> partETags = new ArrayList<PartETag>();
            for (int i = 0; i < partCount; i++) {
                // 計算每一個分片的大小。
                long skipBytes = partSize * i;
                long size = partSize < contentLength - skipBytes ? partSize : contentLength - skipBytes;

                // 建立UploadPartCopyRequest。能夠經過UploadPartCopyRequest指定限定條件。
                UploadPartCopyRequest uploadPartCopyRequest =
                        new UploadPartCopyRequest(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName);
                uploadPartCopyRequest.setUploadId(uploadId);
                uploadPartCopyRequest.setPartSize(size);
                uploadPartCopyRequest.setBeginIndex(skipBytes);
                uploadPartCopyRequest.setPartNumber(i + 1);
                UploadPartCopyResult uploadPartCopyResult = ossClient.uploadPartCopy(uploadPartCopyRequest);

                // 將返回的分片ETag保存到partETags中。
                partETags.add(uploadPartCopyResult.getPartETag());
            }

            // 提交分片拷貝任務。
            CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(
                    destinationBucketName, destinationObjectName, uploadId, partETags);
            ossClient.completeMultipartUpload(completeMultipartUploadRequest);
            System.out.println("\t"+destinationObjectName+"\t"+"拷貝完成");


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

        logger.info("Completed");
    }

}
CopyObjects.java

 

package com.aliyun.oss.demo;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.BucketInfo;
import com.aliyun.oss.model.ListObjectsRequest;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import java.util.List;

/**
 * @BelongsProject: maven-demo
 * @BelongsPackage: com.aliyun.oss.demo
 * @Author: Guoyh
 * @CreateTime: 2018-10-12 13:39
 * @Description: 刪除oss對象
 */
public class DeleteObjects {
    static Logger logger = Logger.getLogger(HelloOSS.class);

    // endpoint是訪問OSS的域名。若是您已經在OSS的控制檯上 建立了Bucket,請在控制檯上查看域名。
    // 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-huhehaote.aliyuncs.com";

    // accessKeyId和accessKeySecret是OSS的訪問密鑰,您能夠在控制檯上建立和查看
    // 注意:accessKeyId和accessKeySecret先後都沒有空格,從控制檯複製時請檢查並去除多餘的空格。
    private static String accessKeyId = "";
    private static String accessKeySecret = "";

    // Bucket用來管理所存儲Object的存儲空間,
    // Bucket命名規範以下:只能包括小寫字母,數字和短橫線(-),必須以小寫字母或者數字開頭,長度必須在3-63字節之間。
    private static String bucketName = "";

    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,您能夠指定一些參數,
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

        try {
            /*  校驗存儲空間  */
            // 判斷Bucket是否存在。
            if (ossClient.doesBucketExist(bucketName)) {
                System.out.println("您已經建立Bucket:" + bucketName + "。");
            } else {
                System.out.println("您的Bucket不存在,建立Bucket:" + bucketName + "。");
                // 建立Bucket。
                ossClient.createBucket(bucketName);
            }

            // 查看Bucket信息。
            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());


            /*遍歷存儲空間*/
            // 查看Bucket中的Object。
            // 指定前綴。列舉文件
            final String keyPrefix = "************";
            // 列舉包含指定前綴的文件。默認列舉100個文件。
            ObjectListing objectListingWithPrefix = ossClient.listObjects(new ListObjectsRequest(bucketName).withPrefix(keyPrefix));
            List<OSSObjectSummary> sums = objectListingWithPrefix.getObjectSummaries();
            System.out.println("您有如下Object:");
            for (OSSObjectSummary s : sums) {
                System.out.println("\t" + s.getKey());
            }
            System.out.println("\t" + "--------------------------------------------------------------------------");

            /*刪除空間文件*/
            // 刪除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, "************/89gN8339293844m6915l693800g7Tk40.gif");
            System.out.println("刪除Object:" + "************/89gN8339293844m6915l693800g7Tk40.gif" + "成功。");

            System.out.println("\t" + "--------------------------------------------------------------------------");
            ObjectListing objectListingWithPrefixP = ossClient.listObjects(new ListObjectsRequest(bucketName).withPrefix(keyPrefix));
            List<OSSObjectSummary> sum = objectListingWithPrefixP.getObjectSummaries();
            System.out.println("您有如下Object:");
            for (OSSObjectSummary s : sum) {
                System.out.println("\t" + s.getKey());
            }


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

        logger.info("Completed");
    }

}
DeleteObjects.java

 

package com.aliyun.oss.demo;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import java.util.List;

/**
 * @BelongsProject: maven-demo
 * @BelongsPackage: com.aliyun.oss.demo
 * @Author: Guoyh
 * @CreateTime: 2018-10-11 14:51
 * @Description: 下載OSS文件
 */
public class DownloadObjects {
    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-huhehaote.aliyuncs.com";

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

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


    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
        OSSClient ossClient = new OSSClient(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());


            /*遍歷存儲空間文件 並下載*/
            // 查看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
            // 指定前綴。
            final String keyPrefix = "oss-accesslog";
            // 列舉包含指定前綴的文件。默認列舉100個文件。
            ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withPrefix(keyPrefix));
            List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
            System.out.println("您有如下Object:");
            //文件名+訪問路徑
            for (OSSObjectSummary s : sums) {
                /*下載文件到本地*/
                // 下載OSS文件到本地文件。若是指定的本地文件存在會覆蓋,不存在則新建。
                String str = s.getKey();
//                ossClient.getObject(new GetObjectRequest(bucketName, str), new File("G://oss//oss-accesslog//"+str.substring(str.lastIndexOf("/"))));
                System.out.println("\t" + str+"\t" +"下載完成!");
            }

            /*下載文件*/
            String objectKey = "oss-accesslog/**********2018-10-10-15-00-00-0001";
//            ossClient.getObject(new GetObjectRequest(bucketName, objectKey), new File("G://oss//oss-accesslog//"+objectKey.substring(objectKey.lastIndexOf("/"))));
//            System.out.println("\t" + objectKey.substring(objectKey.lastIndexOf("/"))+"\t" +"下載完成!");

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

        logger.info("Completed");
    }

}
DownloadObjects.java

 

package com.aliyun.oss.demo;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import java.util.List;

/**
 * @BelongsProject: maven-demo
 * @BelongsPackage: com.aliyun.oss.demo
 * @Author: Guoyh
 * @CreateTime: 2018-10-11 14:28
 * @Description: 獲取文件訪問的URL
 */
public class GetObjectsRequestURL {
    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-huhehaote.aliyuncs.com";

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

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


    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
        OSSClient ossClient = new OSSClient(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());




            /*遍歷存儲空間*/
            // 查看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
            // 指定前綴。
            final String keyPrefix = "**********";
            // 列舉包含指定前綴的文件。默認列舉100個文件。
            ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withPrefix(keyPrefix));
            List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
            System.out.println("您"+keyPrefix+"有如下Object:");
            //文件名+訪問路徑
            for (OSSObjectSummary s : sums) {
                if (s.getKey().endsWith("/")) {
                    System.out.println("\t" + s.getKey());
                }else {
                    System.out.println("\t" + s.getKey() + "\t" + "訪問路徑:" + "http://**********.oss-cn-huhehaote.aliyuncs.com/" + s.getKey()+"?x-oss-process=image/resize,m_fixed,h_128,w_236");
                }
            }



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

        logger.info("Completed");
    }




}
GetObjectsRequestURL.java

 

package com.aliyun.oss.demo;

import java.io.*;
import java.net.URL;
import java.util.List;
import java.util.Date;
import java.util.Random;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;


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-huhehaote.aliyuncs.com";

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

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


    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
        OSSClient ossClient = new OSSClient(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());



            /*上傳本地圖片*/
            //圖片全路徑
            String filePath = "G://oss//snow.jpg";
            //上傳文件全名稱
            String newFileKey = getStringRandom(32)+getContentType(filePath);
            InputStream inputStream = new FileInputStream(filePath);
            //上傳流文件
            ossClient.putObject(bucketName, "*************/"+newFileKey, inputStream);

            // 設置URL過時時間爲1小時。
            Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
            // 生成以GET方法訪問的簽名URL,訪客能夠直接經過瀏覽器訪問相關內容。
            URL url = ossClient.generatePresignedUrl(bucketName, "*************/"+newFileKey, expiration);
            System.out.println(url);

            /*遍歷存儲空間*/
            // 查看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
            // 指定前綴。
            final String keyPrefix = "*************";
            // 列舉包含指定前綴的文件。默認列舉100個文件。
            ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withPrefix(keyPrefix));
            List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
            System.out.println("您有如下Object:");
            for (OSSObjectSummary s : sums) {
                System.out.println("\t" + s.getKey());
            }

            /*下載文件到本地*/
            // 下載OSS文件到本地文件。若是指定的本地文件存在會覆蓋,不存在則新建。
            ossClient.getObject(new GetObjectRequest(bucketName, "*************/"+newFileKey), new File("G://oss//"+newFileKey));

            /*刪除空間文件*/
            // 刪除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, newFileKey);
            System.out.println("刪除Object:" + newFileKey + "成功。");


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

        logger.info("Completed");
    }

    /**
     *生成隨機數字和字母
     * @param length 長度
     * @return  隨機字符串
     */
    public static String getStringRandom(int length) {
        String val = "";
        Random random = new Random();
        //參數length,表示生成幾位隨機數
        for(int i = 0; i < length; i++) {
            String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
            //輸出字母仍是數字
            if( "char".equalsIgnoreCase(charOrNum) ) {
                //輸出是大寫字母仍是小寫字母
                int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
                val += (char)(random.nextInt(26) + temp);
            } else if( "num".equalsIgnoreCase(charOrNum) ) {
                val += String.valueOf(random.nextInt(10));
            }
        }
        return val;
    }

    /**
     * 經過文件名判斷並獲取OSS服務文件上傳時文件的contentType
     * @param fileName 文件名
     * @return 文件的contentType
     */
    public static  String getContentType(String fileName){
        //文件的後綴名
        String fileExtension = fileName.substring(fileName.lastIndexOf("."));
        if(".bmp".equalsIgnoreCase(fileExtension)) {
            return ".bmp";
        }
        if(".gif".equalsIgnoreCase(fileExtension)) {
            return ".gif";
        }
        if(".jpeg".equalsIgnoreCase(fileExtension)) {
            return ".jpeg";
        }
        if(".jpg".equalsIgnoreCase(fileExtension)) {
            return ".jpg";
        }
        if(".png".equalsIgnoreCase(fileExtension) ) {
            return ".png";
        }
        //默認返回類型
        return ".jpeg";
    }

}
HelloOSS.java

 

package com.aliyun.oss.demo;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import java.util.List;

/**
 * @BelongsProject: maven-demo
 * @BelongsPackage: com.aliyun.oss.demo
 * @Author: Guoyh
 * @CreateTime: 2018-10-11 11:45
 * @Description: oss文件操做管理
 */
public class ListObjects {
    static Logger logger = Logger.getLogger(HelloOSS.class);

    // endpoint是訪問OSS的域名。若是您已經在OSS的控制檯上 建立了Bucket,請在控制檯上查看域名。
    // 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-huhehaote.aliyuncs.com";

    // accessKeyId和accessKeySecret是OSS的訪問密鑰,您能夠在控制檯上建立和查看
    // 注意:accessKeyId和accessKeySecret先後都沒有空格,從控制檯複製時請檢查並去除多餘的空格。
    private static String accessKeyId = "";
    private static String accessKeySecret = "";

    // Bucket用來管理所存儲Object的存儲空間,
    // Bucket命名規範以下:只能包括小寫字母,數字和短橫線(-),必須以小寫字母或者數字開頭,長度必須在3-63字節之間。
    private static String bucketName = "";

    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,您能夠指定一些參數,
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

        try {
            /*  校驗存儲空間  */
            // 判斷Bucket是否存在。
            if (ossClient.doesBucketExist(bucketName)) {
                System.out.println("您已經建立Bucket:" + bucketName + "。");
            } else {
                System.out.println("您的Bucket不存在,建立Bucket:" + bucketName + "。");
                // 建立Bucket。
                ossClient.createBucket(bucketName);
            }

            // 查看Bucket信息。
            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());

//
//            /*遍歷存儲空間*/
//            // 查看Bucket中的Object。
//            // 指定前綴。列舉文件
//            final String keyPrefix = "********";
//            // 列舉包含指定前綴的文件。默認列舉100個文件。
//            ObjectListing objectListingWithPrefix = ossClient.listObjects(new ListObjectsRequest(bucketName).withPrefix(keyPrefix));
//            List<OSSObjectSummary> sums = objectListingWithPrefix.getObjectSummaries();
//            System.out.println("您有如下Object:");
//            for (OSSObjectSummary s : sums) {
//                System.out.println("\t" + s.getKey());
//            }
//            System.out.println("\t" + "-----------------------------------------------------");

//            // 列舉文件。 若是不設置KeyPrefix,則列舉存儲空間下全部的文件。KeyPrefix,則列舉包含指定前綴的文件。
//            ObjectListing objectListingOne = ossClient.listObjects(bucketName);
//            List<OSSObjectSummary> sumsOne = objectListingOne.getObjectSummaries();
//            for (OSSObjectSummary s : sumsOne) {
//                System.out.println("\t" + s.getKey());
//            }
//            System.out.println("\t" + "-----------------------------------------------------");
//
//
//            // 設置最大個數。
//            final int maxKeys = 200;
//            // 列舉文件。
//            ObjectListing objectListingWithMaxKeys = ossClient.listObjects(new ListObjectsRequest(bucketName).withMaxKeys(maxKeys));
//            List<OSSObjectSummary> sumsPlus = objectListingWithMaxKeys.getObjectSummaries();
//            for (OSSObjectSummary s : sumsPlus) {
//                System.out.println("\t" + s.getKey());
//            }
//            System.out.println("\t" + "-----------------------------------------------------");

            //分頁列舉全部文件
            final int maxKey = 200;
            String nextMarker = null;
            ObjectListing objectListing;

            do {
                objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withMarker(nextMarker).withMaxKeys(maxKey));

                List<OSSObjectSummary> sumsx = objectListing.getObjectSummaries();
                for (OSSObjectSummary s : sumsx) {
                    System.out.println("\t" + s.getKey());
                }

                nextMarker = objectListing.getNextMarker();

            } while (objectListing.isTruncated());

            System.out.println("\t" + "-----------------------------------------------------");
//
//
//            // 構造ListObjectsRequest請求。
//            ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
//            // 列出文件。
//            ObjectListing listing = ossClient.listObjects(listObjectsRequest);
//            // 遍歷全部文件。
//            System.out.println("Objects:");
//            for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
//                System.out.println(objectSummary.getKey());
//            }
//            // 遍歷全部commonPrefix。
//            System.out.println("CommonPrefixes:");
//            for (String commonPrefix : listing.getCommonPrefixes()) {
//                System.out.println(commonPrefix);
//            }

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

        logger.info("Completed");
    }

}
ListObjects.java

 

package com.aliyun.oss.demo;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.URL;
import java.util.List;
import java.util.Date;
import java.util.Random;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import javax.swing.*;


public class UploadPictures2OSS extends JFrame implements ActionListener {
    static Logger logger = Logger.getLogger(UploadPictures2OSS.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-huhehaote.aliyuncs.com";

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

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

    JButton jb = new JButton("選擇文件");

    public static void main(String[] args) {
        // TODO 自動生成的方法存根
        new UploadPictures2OSS();
    }

    public UploadPictures2OSS() {
        jb.setActionCommand("open");
        //設置按鈕顏色
        jb.setBackground(Color.LIGHT_GRAY);
        //創建容器使用邊界佈局
        this.getContentPane().add(jb, BorderLayout.SOUTH);

        jb.addActionListener(this);
        this.setTitle("標題");
        this.setSize(333, 288);
        this.setLocation(200, 200);
        //顯示窗口true
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("open")) {
            JFileChooser jf = new JFileChooser();
            //顯示打開的文件對話框
            jf.showOpenDialog(this);
            //使用文件類獲取選擇器選擇的文件
            File f = jf.getSelectedFile();
            //返回路徑名
            String s = f.getAbsolutePath();
            //JOptionPane彈出對話框類,顯示絕對路徑名
            //JOptionPane.showMessageDialog(this, s, "標題",JOptionPane.WARNING_MESSAGE);
            uploadPicture(s);
        }
    }

    public void uploadPicture(String path) {
        // 日誌配置,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
        OSSClient ossClient = new OSSClient(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());



            /*上傳本地圖片*/
            //圖片全路徑
            String filePath = path;
            //上傳文件全名稱
            String newFileKey = getStringRandom(32) + getContentType(filePath);
            InputStream inputStream = new FileInputStream(filePath);
            //上傳流文件
            ossClient.putObject(bucketName, "*********/" + newFileKey, inputStream);

            // 設置URL過時時間爲1小時。
            Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
            // 生成以GET方法訪問的簽名URL,訪客能夠直接經過瀏覽器訪問相關內容。
            URL url = ossClient.generatePresignedUrl(bucketName, "*********/" + newFileKey, expiration);
            System.out.println(url);

            /*遍歷存儲空間*/
            // 查看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
            // 指定前綴。
            final String keyPrefix = "*********";
            // 列舉包含指定前綴的文件。默認列舉100個文件。
            ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withPrefix(keyPrefix));
            List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
            System.out.println("您有如下Object:");
            for (OSSObjectSummary s : sums) {
                System.out.println("\t" + s.getKey());
            }

            /*下載文件到本地*/
            //下載OSS文件到本地文件。若是指定的本地文件存在會覆蓋,不存在則新建。
//            ossClient.getObject(new GetObjectRequest(bucketName, "*********/"+newFileKey), new File("G://oss//"+newFileKey));

            /*刪除空間文件*/
            // 刪除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, "*********/"+newFileKey);
//            System.out.println("刪除Object:" + newFileKey + "成功。");


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

        logger.info("Completed");
    }

    /**
     * 生成隨機數字和字母拼接的字符串
     * @param length 返回字符串長度
     * @return
     * @author Guoyh
     * @date 2018/10/10 12:25
     */
    public static String getStringRandom(int length) {
        String val = "";
        Random random = new Random();
        //參數length,表示生成幾位隨機數
        for (int i = 0; i < length; i++) {
            String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
            //輸出字母仍是數字
            if ("char".equalsIgnoreCase(charOrNum)) {
                //輸出是大寫字母仍是小寫字母
                int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
                val += (char) (random.nextInt(26) + temp);
            } else if ("num".equalsIgnoreCase(charOrNum)) {
                val += String.valueOf(random.nextInt(10));
            }
        }
        return val;
    }

    /**
     * 經過文件名判斷並獲取OSS服務文件上傳時文件的contentType
     *
     * @param fileName 文件名
     * @return 文件的contentType
     */
    public static String getContentType(String fileName) {
        //文件的後綴名
        String fileExtension = fileName.substring(fileName.lastIndexOf("."));
        if (".bmp".equalsIgnoreCase(fileExtension)) {
            return ".bmp";
        }
        if (".gif".equalsIgnoreCase(fileExtension)) {
            return ".gif";
        }
        if (".jpeg".equalsIgnoreCase(fileExtension)) {
            return ".jpeg";
        }
        if (".jpg".equalsIgnoreCase(fileExtension)) {
            return ".jpg";
        }
        if (".png".equalsIgnoreCase(fileExtension)) {
            return ".png";
        }
        //默認返回類型
        return ".jpeg";
    }

}
UploadPictures2OSS.java
相關文章
相關標籤/搜索