העלאות מרובות חלקים באמזון S3 עם Java

1. סקירה כללית

במדריך זה נראה כיצד לטפל בהעלאות מרובות חלקים באמזון S3 עם AWS Java SDK.

במילים פשוטות, בהעלאה מרובת חלקים, אנו מחלקים את התוכן לחלקים קטנים יותר ומעלים כל חלק בנפרד. כל החלקים מורכבים מחדש לאחר קבלתם.

העלאות מרובות חלקים מציעות את היתרונות הבאים:

  • תפוקה גבוהה יותר - אנו יכולים להעלות חלקים במקביל
  • שחזור שגיאות קל יותר - עלינו להעלות מחדש רק את החלקים שנכשלו
  • השהה והתחל בהעלאות - אנו יכולים להעלות חלקים בכל נקודת זמן. ניתן להשהות את כל התהליך ולהעלות את החלקים הנותרים מאוחר יותר

שים לב שבעת השימוש בהעלאה מרובת חלקים עם אמזון S3, כל חלק למעט החלק האחרון חייב להיות בגודל של 5 מגה בייט לפחות.

2. תלות Maven

לפני שנתחיל, עלינו להוסיף את התלות ב- AWS SDK בפרויקט שלנו:

 com.amazonaws aws-java-sdk 1.11.290 

לצפייה בגרסה העדכנית ביותר, עיין ב Maven Central.

3. ביצוע העלאה מרובת חלקים

3.1. יצירת לקוח אמזון S3

ראשית, אנחנו צריכים צור לקוח לגישה לאמזון S3. נשתמש ב- AmazonS3ClientBuilder למטרה זו:

AmazonS3 amazonS3 = AmazonS3ClientBuilder .standard () .withCredentials (DefaultAWSCredentialsProviderChain חדש ()) .withRegion (Regions.DEFAULT_REGION) .build ();

זה יוצר לקוח המשתמש בשרשרת ספקי האישורים המוגדרת כברירת מחדל לגישה לאישורי AWS.

לפרטים נוספים על אופן הפעולה של רשת ספקי האישור המוגדרת כברירת מחדל, עיין בתיעוד. אם אתה משתמש באזור שאינו ברירת המחדל (ארה"ב מערב -2), וודא שאתה מחליף אזורים.DEFAULT_REGION עם אותו אזור מותאם אישית.

3.2. יצירת TransferManager לניהול העלאות

נשתמש TransferManagerBuilder ליצור TransferManager למשל.

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

TransferManager tm = TransferManagerBuilder.standard () .withS3Client (amazonS3) .withMultipartUploadThreshold ((long) (5 * 1024 * 1025)) .build ();

סף העלאה מרובת חלקים מציין את הגודל, בתים, שמעליו יש לבצע את ההעלאה כהעלאה מרובת חלקים.

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

3.3. העלאת אובייקט

להעלאת אובייקט באמצעות TransferManager אנחנו פשוט צריכים לקרוא לזה העלה () פוּנקצִיָה. זה מעלה את החלקים במקביל:

מחרוזת bucketName = "baeldung-bucket"; מחרוזת keyName = "my-picture.jpg"; קובץ מחרוזת = קובץ חדש ("מסמכים / my-picture.jpg"); העלה העלאה = tm.upload (bucketName, keyName, file);

TransferManager.upload () מחזירה העלה לְהִתְנַגֵד. ניתן להשתמש בזה לבדיקת הסטטוס וניהול ההעלאות. נעשה זאת בחלק הבא.

3.4. ממתין להשלמת ההעלאה

TransferManager.upload () היא פונקציה שאינה חוסמת; הוא חוזר מיד בזמן שההעלאה פועלת ברקע.

אנחנו יכולים השתמש בחזרה העלה התנגד לחכות להשלמת ההעלאה לפני היציאה מהתוכנית:

נסה {upload.waitForCompletion (); } לתפוס (AmazonClientException e) {// ...}

3.5. מעקב אחר התקדמות ההעלאה

מעקב אחר התקדמות ההעלאה הוא דרישה נפוצה למדי; אנו יכולים לעשות זאת בעזרת א פrogressListener למשל:

ProgressListener progressListener = progressEvent -> System.out.println ("בתים שהועברו:" + progressEvent.getBytesTransferred ()); PutObjectRequest בקשה = PutObjectRequest חדש (bucketName, keyname, file); request.setGeneralProgressListener (progressListener); העלאת העלאה = tm.upload (בקשה);

ה ProgressListener שיצרנו פשוט נמשיך להדפיס את מספר הבתים שהועברו עד לסיום ההעלאה.

3.6. שליטה במקביל להעלאה

כברירת מחדל, TransferManager משתמש ביותר מ- 10 שרשורים לביצוע העלאות מרובות חלקים.

אנו יכולים, עם זאת, לשלוט בכך על ידי ציון שירות ExecutorService תוך כדי בנייה TransferManager:

int maxUploadThreads = 5; TransferManager tm = TransferManagerBuilder.standard () .withS3Client (amazonS3) .withMultipartUploadThreshold ((long) (5 * 1024 * 1025)) .withExecutorFactory (() -> Executors.newFixedThreadPool (maxUploadThreads))) build.

כאן השתמשנו במבדה ליצירת יישום עטיפה של ExecutorFactory והעביר את זה ל withExecutorFactory () פוּנקצִיָה.

4. מסקנה

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

כמו תמיד, הקוד השלם של מאמר זה זמין באתר GitHub.


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