У меня есть файлы, хранящиеся на S3 с идентификатором GUID в качестве имени ключа.
Я использую предварительно подписанный URL-адрес для загрузки в соответствии с S3 REST API
Я сохраняю исходное имя файла в моей базе данных. Когда пользователь щелкает, чтобы загрузить файл из моего веб-приложения, я хочу вернуть его исходное имя файла, но в настоящее время все, что они получают, - это GUID . Как я могу этого добиться?
Мое веб-приложение находится в отделе продаж, поэтому у меня нет особого контроля над ответом. Перенаправляет все загрузки файла на веб-сервер, а затем переименовывает его из-за ограничений регулятора.
Есть ли перенаправление HTML, мета-обновление, Javascript, которые я могу использовать? Есть ли способ изменить имя файла загрузки для S3 (единственное, что я могу придумать, это скопировать объект под новое имя, загрузить его, а затем удалить).
Я хочу избежать создания корзины для каждого пользователя, так как у нас будет много пользователей, и все еще нет гарантии, что каждый файл в каждой корзине будет иметь уникальное имя.
Какие-нибудь другие решения?
Ответы:
Думаю, ваш кросс разместил этот вопрос на форуме Amazon S3 , но ради других я хотел бы разместить ответ здесь:
Если существует только одно «имя файла пользователя» для каждого объекта S3, то вы можете установить заголовок Content-Disposition в вашем файле s3, чтобы установить имя файла загрузки: Content-Disposition: attachment; filename = foo.bar
Честно говоря, я хотел бы упомянуть, что не я давал правильный ответ на форуме Amazon, и все кредиты должны быть отданы Колину Роудсу ;-)
источник
https://...example.txt?response-content-disposition=attachment;filename=foo.bar
Хотя принятый ответ верен, я считаю его очень абстрактным и трудным для использования.
Вот фрагмент кода node.js, который решает заявленную проблему. Я советую выполнить его как AWS Lambda для создания предварительно подписанного URL-адреса.
Обратите внимание на
ResponseContentDisposition
атрибутparams
объекта, переданного вs3.getSignedUrl
функцию.Дополнительная информация в документе функции getObject по адресу http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property.
источник
originalFilename
параметром as.В начале января 2011 года S3 добавил переопределения заголовка запроса. Эта функция позволяет вам «динамически» изменять заголовок Content-Disposition для отдельных запросов.
См. Дополнительную информацию в документации S3 по получению объектов .
источник
Для Java AWS SDK, приведенный ниже, должен работать фрагмент кода:
источник
С C # с использованием AWSSDK,
источник
У меня такая же проблема, я решил ее, установив http-заголовок «content-disposition» при отправке файла на S3, версия SDK - это AWS SDK для PHP 3.x. вот документ http://docs.amazonaws.cn/en_us/aws-sdk-php/latest/api-s3-2006-03-01.html#putobject
часть моего кода
источник
Это выглядит так: response_content_disposition недокументирован в методе presigned_url. Это то, что сработало для меня
источник