跳至内容

Amplify Gen 2 uses default S3 bucket instead of selected one

0

I am building an app in react native using amplify. I have 2 S3 buckets, one for images and the other for thumbnails which i have set up through amplify configure.

Amplify.configure({ Auth: { //auth settings }, Storage: { S3: { region: "ap-southeast-2", bucket: "app-thumbnails",

  buckets: {
    'thumbnails': {
      bucketName: 'app-thumbnails',
      region: 'ap-southeast-2'
    },
    'images': {
      bucketName: 'app-images',
      region: 'ap-southeast-2'
    }
  }
}

}, });

When trying to access files from the images bucket using options it switches to the default bucket. I have tried switching the default bucket in the config and experience the same result when trying to access thumbnails.

import { list } from 'aws-amplify/storage';

useEffect(() => {
    const getImages = async () => {
      try {
        const result = await list({
            path: '',
            options: {
                bucket: 'images'
            }
        });
        setThumbnails(result);
        console.log(result);
      } catch (error) {
        console.log( error);
      }
    };

    getImages();
  }, []);

I followed the Gen 2 documentation for react native and still run into this error. Any help would be greatly appreciated.

已提问 2 年前248 查看次数

2 回答
0

Alternatively, provide bucket name from console and associated region:

import { list } from 'aws-amplify/storage';

useEffect(() => {
    const getImages = async () => {
      try {
        const result = await list({
            path: '',
            options: {
                bucket: {
                              bucketName: 'app-images',
                              region: 'ap-southeast-2'
                        }
            }
        });
        setThumbnails(result);
        console.log(result);
      } catch (error) {
        console.log( error);
      }
    };

    getImages();
  }, []);

For reference: https://docs.amplify.aws/react-native/build-a-backend/storage/list-files/#list-files-from-a-specified-bucket

AWS

已回答 2 年前

  • Hi Alex,

    Thanks for your reply, this is the method I've tried, exactly as its done in the documentation with the bucketName and region in the options however it still goes to the default bucket from my amplify.configure. I have tested both buckets i am using and have the required access however for some reason it looks like the options section is maybe not being picked up? I have set up my amplify.configure as shown in the documentation here: https://docs.amplify.aws/react-native/build-a-backend/storage/use-with-custom-s3/

    Thanks for your time

0

Hi Nem:

Please try to create named backend objects :

amplify/storage/resource.ts

export const appThumbnails = defineStorage({
  name: 'appThumbnails',
  isDefault: true, // identify your default storage bucket (required)
});

export const appImages = defineStorage({
  name: 'appImages',
  access: (allow) => ({
    'private/{entity_id}/*': [
      allow.entity('identity').to(['read', 'write', 'delete'])
    ]
  })
})

amplify/backend.ts

import { defineBackend } from '@aws-amplify/backend';
import { auth } from './auth/resource';
import { appThumbnails, appImages } from './storage/resource';

defineBackend({
  auth,
  appThumbnails,
  appImages,
});

in your app code

import { list } from 'aws-amplify/storage';

useEffect(() => {
    const getImages = async () => {
      try {
        const result = await list({
            path: '',
            options: {
                bucket: 'appImages'
            }
        });
        setThumbnails(result);
        console.log(result);
      } catch (error) {
        console.log( error);
      }
    };

    getImages();
  }, []);

changed some names from https://docs.amplify.aws/react-native/build-a-backend/storage/set-up-storage/#configure-additional-storage-buckets

AWS

已回答 2 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。