הצגת קבצים המאוחסנים באמאזון S3, עם הרשאה


  • תכנות

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

    (כשניגשים לתמונה בלי הרשאה אז התוצאה היא XML כזה

     <Error>
     
     <Code>AccessDenied</Code>
     
     <Message>Access Denied</Message>
     
     <RequestId>4DE00EB1BC6288C2</RequestId>
     
     <HostId>
     
     zCIH8CSnJudrxRu5wsA5IKqXJ0JyDJLdsjjvyTdUj8zNJmY23Vvd3+7fYfVFJj65SgIsA+urjqs=
     
     </HostId>
     
     </Error>
    

    איפה יש דוגמא איך עושים את זה?
    תודה.

    נ.ב. אני לא צריך כרגע את כל המנגנון של יצירת ההרשאות אלא רק את הדוגמא של הHTML.


  • ניהול

    אם התמונות לא ציבוריות, צריך בצד השרת ליצור קישור עם טוקן (Presigned URL) שמאפשר לגשת אליהם לפרק זמן שהוקצב.
    באיזה פלטפורמה צד השרת שלך, PHP?


  • תכנות

    php.
    יש לי טוקן. אני צריך רק את הקליינט.
    תודה.


  • ניהול

    לא הבנת אותי עם הטוקן.
    יש לך מזהה של באקט ושל קובץ. אתה מבקש מאמזון ליצור לקובץ הזה URL זמני.
    תראה פה: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/s3-presigned-url.html

    $cmd = $s3Client->getCommand('GetObject', [
        'Bucket' => 'my-bucket',
        'Key' => 'testKey'
    ]);
    
    $request = $s3Client->createPresignedRequest($cmd, '+20 minutes');
    
    // Get the actual presigned-url
    $presignedUrl = (string)$request->getUri();
    

    המשתנה presignedUrl מכיל כתובת שמאפשרת גישה ציבורית (לכל מי שמחזיק את הלינק כמובן) לתמונה הפרטית שלך, למשך 20 דקות.


  • תכנות

    תודה.
    בשיטה הזו אם יש 200 תמונות בעמ' אז צריך להריץ 200 פעם את ה-API לכל תמונה בנפרד?


  • ניהול

    @chagold אמר בהצגת קבצים המאוחסנים באמאזון S3, עם הרשאה:

    תודה.
    בשיטה הזו אם יש 200 תמונות בעמ' אז צריך להריץ 200 פעם את ה-API לכל תמונה בנפרד?

    כן.
    כמובן הכל בצד שרת מיידית לפני שהדף חוזר בכלל ללקוח.


  • תכנות

    האם ניתן להגדיל את האשראי של הגישה לתמונות אחרי שהטוקן נוצר?

    (אסביר:
    שיטת הפעולה שלי היא שכל התמונות מסודרות במבנה היררכיוני של 'עץ תיקיות', וגם אם יש 10 רמות של תיקיות אבל הקליינט מקבל מראש אובייקט JSON אחד שכולל את כל העץ תיקיות. (אח"כ מתבצע ניווט בין התיקיות ( = בין הרמות בJSON) ע"י שינוי תצוגת צד הלקוח בלבד באותו קומפוננט).
    במבנה הזה, גם התמונות נשלחות מראש. וזאת אומרת שאם לקוח נמצא בתיקיה אחת ואחרי 20 דקות מפתיחת הסשן הוא עובר תצוגה, הוא יקבל שגיאת קריאת תמונות. אני מחפש איך לפתור את זה).


  • תכנות

    פוסט זה נמחק!

  • ניהול

    תשנה את הדקות:

    $request = $s3Client->createPresignedRequest($cmd, '+100 minutes');

 

בא תתחבר לדף היומי!