AWS的s3儲存的java實現-gradle構建環境
阿新 • • 發佈:2019-02-15
將開發工具包與 Gradle 一起使用,要在 Gradle 專案中使用適用於 Java 的 AWS 開發工具包,請使用 Spring 的適用於 Gradle 的依賴項管理外掛,使用該外掛,可以匯入開發工具包的 Maven 材料清單 (BOM) 以管理專案的開發工具包依賴項,配置適用於 Gradle 的開發工具包。
1.向 build.gradle 檔案中新增依賴項管理外掛
apply plugin: "io.spring.dependency-management"
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "io.spring.gradle:dependency-management-plugin:1.0.0.RC2"
}
}
//將 BOM 新增到該檔案的 dependencyManagement 部分
dependencyManagement {
imports {
mavenBom 'com.amazonaws:aws-java-sdk-bom:1.11.161'
}
}
//在依賴項部分中指定您將使用的開發工具包模組
dependencies {
compile 'com.amazonaws:aws-java-sdk-s3'
}
Gradle 將自動使用 BOM 中的資訊來解析開發工具包依賴項的正確版本。
2.然後下面是java程式碼:
import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.*; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Paths; import java.util.Iterator; import java.util.List; /** * SDK介面方法 * Created by wangwl on 2017/7/13. */ public class S3SDKClientTest { public static void main(String[] args) { } /** * ########################################## * bucket的操作 * ########################################## */ /** * 獲取bucket * @param bucket_name * @return */ public static Bucket getBucket(String bucket_name) { final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); Bucket named_bucket = null; List<Bucket> buckets = s3.listBuckets(); for (Bucket b : buckets) { if (b.getName().equals(bucket_name)) { named_bucket = b; } } return named_bucket; } /** * 建立bucket * @param bucket_name * @return */ public static Bucket createBucket(String bucket_name) { final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); Bucket b = null; if (s3.doesBucketExist(bucket_name)) { System.out.format("Bucket %s already exists.\n", bucket_name); b = getBucket(bucket_name); } else { try { b = s3.createBucket(bucket_name); } catch (AmazonS3Exception e) { System.err.println(e.getErrorMessage()); } } return b; } /** * 列出所有的buckets * @return */ public static List<Bucket> listBuckets() { final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); List<Bucket> buckets = s3.listBuckets(); System.out.println("Your Amazon S3 buckets:"); for (Bucket b2 : buckets) { System.out.println("* " + b2.getName()); } return buckets; } /** * 刪除不受版本控制的儲存桶之前從中刪除物件. * 要在刪除不受版本控制的儲存桶之前從中刪除物件, * 可以使用 AmazonS3 客戶端的 listObjects 方法檢索物件列表,使用 deleteObject 刪除各個物件。 * @param bucket_name */ public static void deleteObjectsNoVersion(String bucket_name){ final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { System.out.println(" - removing objects from bucket"); //獲取該bucket下的所有物件 ObjectListing object_listing = s3.listObjects(bucket_name); while (true) { for (Iterator<?> iterator = object_listing.getObjectSummaries().iterator(); iterator.hasNext();) { S3ObjectSummary summary = (S3ObjectSummary)iterator.next(); s3.deleteObject(bucket_name, summary.getKey()); } // more object_listing to retrieve? if (object_listing.isTruncated()) { object_listing = s3.listNextBatchOfObjects(object_listing); } else { break; } }; } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } } /** * 刪除受版本控制的儲存桶之前從中刪除物件 * 如果您使用受版本控制的儲存桶,還需要先刪除儲存桶中儲存的所有受版本控制物件,然後才能刪除儲存桶。 * 使用在刪除儲存桶中物件時使用的相似方法,通過使用 AmazonS3 客戶端的 listVersions 方法列出所有受版本控制的物件, * 然後使用 deleteVersion 刪除各個物件。 * @param bucket_name */ public static void deleteObjectsVersion(String bucket_name) { final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { System.out.println(" - removing objects from bucket"); ObjectListing object_listing = s3.listObjects(bucket_name); while (true) { for (Iterator<?> iterator = object_listing.getObjectSummaries().iterator(); iterator.hasNext();) { S3ObjectSummary summary = (S3ObjectSummary)iterator.next(); s3.deleteObject(bucket_name, summary.getKey()); } // more object_listing to retrieve? if (object_listing.isTruncated()) { object_listing = s3.listNextBatchOfObjects(object_listing); } else { break; } }; System.out.println(" - removing versions from bucket"); VersionListing version_listing = s3.listVersions( new ListVersionsRequest().withBucketName(bucket_name)); while (true) { for (Iterator<?> iterator = version_listing.getVersionSummaries().iterator(); iterator.hasNext();) { S3VersionSummary vs = (S3VersionSummary)iterator.next(); s3.deleteVersion(bucket_name, vs.getKey(), vs.getVersionId()); } if (version_listing.isTruncated()) { version_listing = s3.listNextBatchOfVersions(version_listing); } else { break; } } } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } } /** * 刪除一個空的bucket * @param bucket_name */ public static void deleteEmptyBucket(String bucket_name) { final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { s3.deleteBucket(bucket_name); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } } /** * ########################################## * object的操作 * ########################################## */ /** * 上傳物件到bucket * @param bucket_name * @param file_path 檔案物件路徑 */ public static void putObject(String bucket_name, String file_path) { final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); String key_name = Paths.get(file_path).getFileName().toString(); try { s3.putObject(bucket_name, key_name, new java.io.File(file_path)); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } } /** * 列出bucket裡的所有物件。 * listObjects 方法返回一個 ObjectListing 物件,該物件提供有關儲存桶中物件的資訊。 * @param bucket_name */ public static void listObjects(String bucket_name) { final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); ObjectListing ol = s3.listObjects(bucket_name); //使用 getObjectSummaries 方法獲取 S3ObjectSummary 物件的列表 List<S3ObjectSummary> objects = ol.getObjectSummaries(); for (S3ObjectSummary os: objects) { //呼叫其 getKey 方法以檢索物件名稱 System.out.println("*物件名稱: " + os.getKey()); } } /** * 下載物件 * 使用 AmazonS3 客戶端的 getObject 方法,並向其傳遞要下載的儲存桶和物件的名稱。 * 如果成功,此方法將返回一個 S3Object。指定的儲存桶和物件鍵必須存在,否則將出現錯誤。 * @param bucket_name * @param key_name 物件的名稱 */ public static void getObject(String bucket_name, String key_name) { final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { S3Object o = s3.getObject(bucket_name, key_name); //獲取物件的內容,返回一個 S3ObjectInputStream,其行為與標準 Java InputStream 物件的相同 S3ObjectInputStream s3is = o.getObjectContent(); //定義一個物件輸出的檔案 FileOutputStream fos = new FileOutputStream(new File(key_name)); byte[] read_buf = new byte[1024]; int read_len = 0; while ((read_len = s3is.read(read_buf)) > 0) { fos.write(read_buf, 0, read_len); } s3is.close(); fos.close(); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } catch (FileNotFoundException e) { System.err.println(e.getMessage()); System.exit(1); } catch (IOException e) { System.err.println(e.getMessage()); System.exit(1); } } /** * 複製物件(從一個bucket到另一個bucket)。 * 您可以將 copyObject 與 deleteObject 配合使用來移動或重新命名物件, * 方式是先將物件複製到新名稱 (您可以使用與源和目標相同的儲存桶),然後從物件的舊位置刪除物件。 * @param from_bucket * @param object_key 物件的名稱 * @param to_bucket */ public static void copyObject(String from_bucket, String object_key, String to_bucket) { final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { s3.copyObject(from_bucket, object_key, to_bucket, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } } /** * 刪除物件 * @param bucket_name * @param object_key 物件的名稱 */ public static void deleteObject(String bucket_name, String object_key) { final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { s3.deleteObject(bucket_name, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } } /** * 批量刪除物件 * @param bucket_name * @param object_keys 物件名稱的陣列 */ public static void deleteObjects(String bucket_name, String object_keys) { final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { DeleteObjectsRequest dor = new DeleteObjectsRequest(bucket_name).withKeys(object_keys); s3.deleteObjects(dor); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } } }
參考Amazon web services官網:http://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/examples-s3-buckets.html
參考Amazon web services官網:http://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/examples-s3-buckets.html
參考Amazon web services官網:http://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/examples-s3-buckets.html