У меня есть корзина S3 (AWS), где я храню mp3-файлы.И я работаю над приложением, которое было инициализировано через CLI Amplify с использованием amplify init
, хранилище S3 было предоставлено с использованием amplify add storage
(S3), а приложение (create-реагировать) было опубликовано через репозиторий Amplify, подключенный через AmplifyКонсоль.
Методы Storage.put()
и Storage.get()
, описанные ниже, являются частью библиотеки aws-amplify
(v1.1.29), устанавливаемой через NPM.
При использовании Storage.put()
Я могу установить (или не установить) Content-Type и Content-Disposition файлов.
Если я установлю Content-Type на audio/mpeg
и Content-Disposition на "вложение", я смогу использовать Storage.get()
для получения предварительно подписанного URL-адреса, который предложит окну загрузки ОС сохранить файл..
Если я только установлю Content-Type на audio/mpeg
, оставив Content-Disposition по умолчанию ("inline"), Storage.get()
вернет предварительно подписанный URL, который начнет потоковую передачу / воспроизведение файлав браузере.
Похоже, что это или / или дорога.
В конечном итоге я пытаюсь разрешить потоковую передачу и / или загрузку в пользовательском интерфейсе, например,с кнопками воспроизведения и загрузки, имеющими соответствующее поведение:
Хотя я могу установить Content-Type и Content-Disposition на PUT что-то вроде этого:
Для загрузки
await Storage.put(fileName, file, {
contentType: "audio/mpeg",
contentDisposition: "attachment",
});
Для потоковой передачи
await Storage.put(fileName, file, {
contentType: "audio/mpeg"
});
Я не могу понять, как это сделать с помощью метода GET, чтобы переопределитьContent-Disposition.
Я пробовал следующее с файлом uploaперейдите к S3 с использованием Content-Type: «audio / mpeg» и без Content-Disposition, пытаясь переопределить Content-Disposition для разрешения загрузки, используя подписанные URL:
const url = await Storage.get(fileName, {
contentDisposition: "attachment"
});
и
const url = await Storage.get(fileName, {
response-content-disposition: "attachment",
});
Но поведение загрузки против потока всегда будет по умолчанию равным тому, что Content-Disposition установлено в файле на S3, и переопределение не происходит.
Будем благодарны за любые мысли по этому поводу.
Примечание: Я также открыл проблему для этого на репозитории Amplify-JS Github так что, если я получу какие-либо отзывы оттуда, я опубликую результаты здесь.