質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

7017閲覧

AWS S3にあるファイルを別名でダウンロードしたい。

take45

総合スコア30

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2022/01/12 09:16

環境

インフラ AWS EC2 + RDS + S3
アプリ  PHP 8.0.8 + laravel8

概要

社内のファイルアーカイブアプリを開発しています。
S3にあるデータを別名(日本語)でダウンロードしたいと考えています。
local環境やS3未使用時は問題なくダウンロードできたのですが、
S3を使用するとうまくいきません。
ご教授よろしくお願いします。

やったこと

html

1<a href="https://s3-ap-northeast-1.amazonaws.com/bucketname/arch/filename.docx download="テストワード.docx" >ダウンロード</a>

別名ではなく、元のファイル名(filename.docx)でダウンロードされる


html

1<a href="https://s3-ap-northeast-1.amazonaws.com/bucketname/arch/filename.docx?response-content-disposition=テストワード.docx" >ダウンロード</a>

エラー表示される
This XML file does not appear to have any style information associated with it. The document tree is shown below.
\n
<Error>
<script/>
<Code>InvalidArgument</Code>
<Message>Header value cannot be represented using ISO-8859-1.</Message>
<ArgumentName>response-content-disposition</ArgumentName>
<ArgumentValue>テストワード.docx</ArgumentValue>
<RequestId>6XRJ42S86NE6AWFJ</RequestId>
<HostId>pYhE6qXdvMBknLRF37CP9UhLspfQwKQP4U67vcQk5XQ7SRvLvGg/DOEsb7A5TYOCrT3CQojyTXw=</HostId>
</Error>

補足

S3のバケットポリシー

json

1{ 2 "Version": "2012-10-17", 3 "Statement": [ 4 { 5 "Sid": "PublicReadGetObject", 6 "Effect": "Allow", 7 "Principal": "*", 8 "Action": "*", 9 "Resource": "arn:aws:s3:::bucketname/*", 10 "Condition": { 11 "StringLike": { 12 "aws:Referer": [ 13 "https://*.domain/*", 14 "https://*.domain/*" 15 ] 16 } 17 } 18 } 19 ] 20}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

controller経由で別名保存することが出来ました。
AWS S3から大容量をダウンロードするとエラーが発生するので
下記サイトを参考に「Amazon S3 ストリームラッパー 」を使用して無事問題解決することができました。
[PHP] AWS S3から大容量ファイルをダウンロードする方法とメモリ使用量

ありがとうございました。

投稿2022/01/13 06:57

take45

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こちらにほぼ答えが書いてありそうですね。
S3から直接ダウンロードさせるときにファイル名を差し替える

Amazon S3の署名付きURL発行の際に別名でファイルをダウンロードさせるようにする

これらはすぐ出てきたので、困ったらまずは調べる癖をつけてみましょう。
また、セキュリティ上の観点からもURLの直指定ではなくpre-signed URLを発行する仕組みにすることを推奨します。


以下は質問の事象と関係ないところですが

S3のエンドポイントをパス形式で指定するのは今後は避けたほうが賢明です
【注意喚起】 2020年9月30日以降、パス形式での S3 API リクエストは受け付けられなくなります。

また、該当のサービスがあるサイトは適切にアクセスコントロールされてますか?
このバケットポリシーだと該当のドメインがリファラに含まれていれば誰でもダウンロードできちゃうと思いますが…。
pre-signed URLを使えばパブリックにしなくても期限付き一時URLを発行できるので前述の通りそちらをおすすめします。

投稿2022/01/12 09:40

yu_1985

総合スコア7586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

take45

2022/01/12 23:33

早速のご回答ありがとうございます。 実は「S3から直接ダウンロードさせるときにファイル名を差し替える」は 私も拝見して試したのですが、laravelで「S3Client」のエラーが出まして 挫折していました。記述漏れ申し訳ございません。 (元々AWS SDKが入っていなかったので、インストールしたのですが使い方がいまいちわからなかった。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問