Я смог использовать модуль Storage, но это взлом.
const storage = this.amplifyService.storage();
const storageOptions = {
bucket: 'any-bucket',
// see https://github.com/aws/aws-amplify/blob/master/packages/aws-amplify/src/Storage/Storage.ts#L325
// public appears to be the only option that doesn't append hardcoded values
customPrefix: {
public: ''
},
level: 'public'
};
storage.get( 'objectIdWithinBucket', storageOptions ).then(
data => {
console.log( "A signed URL is returned that can be used to access the object");
console.log( data );
},
error => {
console.log( "Boo. Err. ", error );
}
)
Почему это работает: пользовательский префикс и открытый уровень переопределяют параметры s3 по умолчанию. Ресурс на самом деле не является общедоступным, но любой другой параметр добавляет косые черты и дополнительные символы, которые не принадлежат.
Модуль хранения (на мой взгляд) является примером плохого проектирования API: они предоставляют значения, основанные на ожидаемом сценарии использования, который не документирован. Возможность их переопределить не документирована нигде, которую я могу найти. Пример: если вы не укажете «уровень», он добавит «public» в качестве префикса к идентификатору объекта.
Более того, модуль Storage предполагает, что вошедшие в систему пользователи хранят объекты в одной корзине с известным соглашением об именах. Изменить их сложно.
Предупреждение: переопределение может назначить переданные параметры в _options по умолчанию. Это может произойти в https://github.com/aws/aws-amplify/blob/240e50b61f50eaf3712bfbc088d1b096360b401c/packages/aws-amplify/src/Storage/Storage.ts#L86 (снимок самого последнего коммита на момент написания)