AWS S3 עם Java

1. הקדמה

במדריך זה נלמד כיצד לקיים אינטראקציה עם מערכת האחסון אמזון S3 (שירות אחסון פשוט) מתוכנת, מג'אווה.

זכור כי ל- S3 יש מבנה פשוט מאוד - כל דלי יכול לאחסן כל מספר של אובייקטים אליהם ניתן לגשת באמצעות ממשק SOAP או ממשק API בסגנון REST.

בהמשך, נשתמש ב- AWS SDK עבור Java כדי ליצור, לרשום ולמחוק דליי S3. אנו גם מעלים, רושמים, מורידים, מעתיקים, נעביר, שמנו ונמחק אובייקטים בתוך הדליים האלה.

2. תלות Maven

לפני שנתחיל, עלינו להכריז על תלות AWS SDK בפרויקט שלנו:

 com.amazonaws aws-java-sdk 1.11.163 

לצפייה בגרסה האחרונה, בדוק את Maven Central.

3. תנאים מוקדמים

כדי להשתמש ב- AWS SDK, נצטרך כמה דברים:

  1. חשבון AWS: אנו זקוקים לחשבון שירותי אינטרנט של אמזון. אם עדיין אין לך, המשך וצור חשבון
  2. אישורי אבטחה של AWS: אלו הם מפתחות הגישה שלנו המאפשרים לנו לבצע שיחות פרוגרמטיות לפעולות API של AWS. אנו יכולים לקבל את האישורים האלה בשתי דרכים, באמצעות שימוש באישורי חשבון AWS מבסיס מפתחות הגישה בדף אישורי האבטחה או באמצעות אישורי משתמש IAM ממסוף ה- IAM.
  3. בחירת אזור AWS: עלינו לבחור אזור (ים) AWS שבו אנו רוצים לאחסן את נתוני ה- Amazon S3 שלנו. זכור שמחירי האחסון של S3 משתנים לפי אזור. לפרטים נוספים, היכנס לתיעוד הרשמי. לצורך הדרכה זו נשתמש במזרח ארה"ב (אוהיו) (אזור us-east-2)

4. יצירת חיבור לקוח

ראשית, עלינו ליצור חיבור לקוח כדי לגשת לשירות האינטרנט של אמזון S3. נשתמש AmazonS3 ממשק למטרה זו:

אישורי AWSCredentials = חדשים BasicAWSCredentials ("", ""); 

ואז להגדיר את הלקוח:

AmazonS3 s3client = AmazonS3ClientBuilder .standard () .withCredentials (AWSStaticCredentialsProvider חדש (אישורים)) .withRegion (Regions.US_EAST_2) .build ();

5. פעולות דלי S3 של אמזון

5.1. יצירת דלי

חשוב לציין כי מרחב השמות של דלי משותף לכל משתמשי המערכת. אז שם הדלי שלנו חייב להיות ייחודי בכל שמות הדלי הקיימים ב- Amazon S3 (נגלה כיצד לבדוק זאת רק בעוד רגע).

יתר על כן, כמפורט בתיעוד הרשמי, על שמות ה- Bucket לעמוד בדרישות הבאות:

  • שמות לא צריכים להכיל קו תחתון
  • השמות צריכים להיות באורך של 3 עד 63 תווים
  • שמות לא צריכים להסתיים במקף
  • שמות אינם יכולים להכיל תקופות סמוכות
  • שמות אינם יכולים להכיל מקפים ליד נקודות (למשל, "my-.bucket.com" ו- "my.-bucket" אינם חוקיים)
  • שמות אינם יכולים להכיל תווים גדולים

בואו ניצור דלי:

מחרוזת bucketName = "baeldung-bucket"; if (s3client.doesBucketExist (bucketName)) {LOG.info ("שם הדלי אינו זמין." + "נסה שוב עם שם דלי אחר."); לַחֲזוֹר; } s3client.createBucket (bucketName);

הנה, אנחנו משתמשים s3client שיצרנו בשלב הקודם. לפני שאנחנו יוצרים דלי, אנחנו בודקים אם שם הדלי שלנו זמין או לא באמצעות doesBucketExist () שיטה. אם שם זה זמין, נשתמש ב- createBucket () שיטה.

5.2. רישומי דליים

כעת, לאחר שיצרנו כמה דליים, בואו נדפיס רשימה של כל הדלי הזמינים בסביבת S3 שלנו באמצעות listBuckets () שיטה. שיטה זו תחזיר רשימה של כל הדליים:

רשימת דליים = s3client.listBuckets (); עבור (דלי דלי: דליים) {System.out.println (bucket.getName ()); }

זה יפרט את כל הדליים הקיימים בסביבת S3 שלנו:

baeldung-bucket baeldung-bucket-test2 elasticbeanstalk-us-east-2

5.3. מחיקת דלי

חשוב לוודא שהדלי שלנו ריק לפני שנוכל למחוק אותו. אחרת, ייזרק חריג. כמו כן, שים לב שרק הבעלים של דלי יכול למחוק אותו ללא קשר להרשאותיו (מדיניות בקרת גישה):

נסה את {s3client.deleteBucket ("baeldung-bucket-test2"); } לתפוס (AmazonServiceException e) {System.err.println ("e.getErrorMessage ()); להחזיר;}

6. פעולות אובייקט S3 של אמזון

קובץ או אוסף נתונים בתוך דלי S3 של אמזון ידועים כאובייקט. אנו יכולים לבצע מספר פעולות על אובייקטים כמו העלאה, רישום, הורדה, העתקה, העברה, שינוי שם ומחיקה.

6.1. העלאת אובייקטים

העלאת אובייקט היא תהליך די פשוט. נשתמש ב- putObject () שיטה המקבלת שלושה פרמטרים:

  1. bucketName: שם הדלי אליו אנו רוצים להעלות אובייקט
  2. מַפְתֵחַ: זהו הנתיב המלא לקובץ
  3. קוֹבֶץ: הקובץ בפועל המכיל את הנתונים להעלות
s3client.putObject (bucketName, "Document / hello.txt", קובץ חדש ("/ Users / user / Document / hello.txt"));

6.2. רישום אובייקטים

נשתמש listObjects () שיטה לרשימת כל האובייקטים הזמינים בדלי S3 שלנו:

ObjectListing objectListing = s3client.listObjects (bucketName); עבור (S3ObjectSummary os: objectListing.getObjectSummaries ()) {LOG.info (os.getKey ()); }

יִעוּד listObjects () שיטת ה- s3client אובייקט יניב את ObjectListing אובייקט, שניתן להשתמש בו כדי לקבל רשימה של כל סיכומי האובייקטים בדלי שצוין. אנחנו רק מדפיסים את המפתח כאן, אבל יש גם כמה אפשרויות אחרות, כמו גודל, בעלים, שינוי אחרון, מחלקת אחסון וכו '...

פעולה זו תדפיס כעת רשימה של כל האובייקטים בתוך הדלי שלנו:

מסמך / hello.txt

6.3. הורדת אובייקט

כדי להוריד אובייקט, נשתמש תחילה ב- getObject () שיטה ב s3client שיחזיר S3Object לְהִתְנַגֵד. ברגע שנקבל את זה, נתקשר getObjectContent () על זה כדי לקבל S3ObjectInputStream אובייקט שמתנהג כמו ג'אווה קונבנציונאלית InputStream.

S3Object s3object = s3client.getObject (bucketName, "picture / pic.png"); S3ObjectInputStream inputStream = s3object.getObjectContent (); FileUtils.copyInputStreamToFile (inputStream, קובץ חדש ("/ Users / user / Desktop / hello.txt"));

הנה, אנו משתמשים FileUtils.copyInputStreamToFile () שיטה על ידי Apache Commons. אתה יכול גם לבקר במאמר זה של Baeldung כדי לחקור דרכים אחרות להמיר InputStream אל א קוֹבֶץ.

6.4. העתקה, שינוי שם והעברת אובייקט

אנו יכולים להעתיק אובייקט על ידי התקשרות copyObject () שיטה על שלנו s3client שמקבל ארבעה פרמטרים:

  1. שם דלי המקור
  2. מפתח אובייקט בדלי המקור
  3. שם דלי יעד (זה יכול להיות זהה למקור)
  4. מפתח אובייקט בדלי היעד
s3client.copyObject ("baeldung-bucket", "picture / pic.png", "baeldung-bucket2", "document / picture.png");

הערה: אנו יכולים להשתמש בשילוב של copyObject () שיטה deleteObject () לביצוע משימות העברה ושינוי שם. הדבר יכלול תחילה העתקה של האובייקט ואז מחיקתו ממיקומו הישן.

6.5. מחיקת אובייקט

למחיקת אובייקט, אנו מתקשרים deleteObject () שיטה ב s3client ולהעביר את שם הדלי ומפתח האובייקט:

s3client.deleteObject ("baeldung-bucket", "picture / pic.png");

6.6. מחיקת אובייקטים מרובים

כדי למחוק מספר עצמים בו זמנית, ניצור תחילה את DeleteObjectsRequest התנגד והעביר את שם הדלי לבנאי שלו. לאחר מכן נעביר מערך של כל מקשי האובייקט שאנחנו רוצים למחוק.

ברגע שיש לנו את זה DeleteObjectsRequest אנחנו יכולים להעביר את זה לחפץ deleteObjects () השיטה שלנו s3client כוויכוח. אם יצליח, פעולה זו תמחק את כל האובייקטים שסיפקנו:

מחרוזת objkeyArr [] = {"document / hello.txt", "document / pic.png"}; DeleteObjectsRequest delObjReq = DeleteObjectsRequest חדש ("baeldung-bucket") .withKeys (objkeyArr); s3client.deleteObjects (delObjReq);

7. מסקנה

במאמר זה התמקדנו ביסודות האינטראקציה עם שירות האינטרנט אמזון S3 - הן ברמה והן ברמת האובייקט.

כמו תמיד, ניתן למצוא את היישום המלא של מדריך זה ב- Github.


$config[zx-auto] not found$config[zx-overlay] not found