Как изменить права на чтение и запись для публичных объектов? - PullRequest
0 голосов
/ 07 октября 2019

Я создаю приложение, используя React-Native и Expo. В таком приложении я использую сервисы AWS Amplify, Cognito, DynamoDB и S3. А именно, в настоящее время я пытаюсь поместить изображения с S3, используя этот API . Я использую эту функцию:

const storeFileInS3 = async (
    fileUri,
    awsKey = null,
    access = "public"
 ) => {
    const blob = await new Promise((resolve, reject) => {
      const xhr = new XMLHttpRequest();
      xhr.onload = function() {
         resolve(xhr.response);
      };
      xhr.onerror = function() {
        reject(new TypeError("Network request failed"));
      };
      xhr.responseType = "blob";
      xhr.open("GET", fileUri, true);
      xhr.send(null);
    });
    const { name, type } = blob._data;
    const options = {
      level: access,
      contentType: type,
    };
    const key = awsKey || name;
    try {
      const result = await Storage.put(key, blob, options);
      return {
         access,
         key: result.key
      };
    } catch (err) {
      throw err;
    }
 };

Вызывается так:

result2 = storeFileInS3(uri)

Это успешно, так как я могу видеть изображение в моей базе данных, успешно загружено. Однако при попытке получить доступ к изображению с помощью функции get :

const result5 = await Storage.get(key, {level: 'public', download: true})

я получаю «Возможный необработанный отказ от обещания» .... «Указанный ключ не существует».

Я сузил проблему до общего доступа к отдельным изображениям. Точное место в S3 В частности, если я щелкну «Все» и поставлю флажок «Читать объект» в разделе доступа к этому объекту, моя функция get не вернет ошибку.

Хотя, как видно из функции storeFileinS3, я поставил файл с общедоступным доступом, он по-прежнему имеет флажок, который я упомянул ранее, не отмеченным.

Есть ли способизменить разрешения всех отдельных объектов в общей папке таким образом, чтобы все объекты предоставляли доступ на чтение «каждому» посредством вызова из React-Native?

Я пытался изменить политику корзины, делаявсе ведро публично, но все равно не меняет этот флажок при загрузке. Я также попытался добавить поле ACL к опциям и установить для него значение «public-read», но ни одна попытка не сработала.

...