信じてください、これには数日かけて調査しましたし、私にとっても奇妙に思えました。しかし、画像以外のすべてのメディアファイルに content-disposition: attachment; filename=X を設定することは、現在ローカルストレージから提供されているメディアファイルの動作を完全に模倣しています。
端的に言うと、いいえ!必要に応じてワンボックス機能を使ってストリーミングすることはできますが、直接のダウンロードリンク [media_file](path_to_media_file)(パスはローカルまたは S3 のどちらか)は、ローカルストレージの場合と同様に、元のファイル名を使用してファイルをダウンロードするはずです(S3 に移行されたファイルも含みます)。
しかし、S3 への直接アップロードではこれが突然不可能になっています。[media_file](S3_path_to_media_file) リンクはメディアファイルを新しいタブでストリーミングしてしまいます(これはワンボックス機能が行うことなので不要です)。また、メディアプレイヤーのコントロールからダウンロードを試みると、元のファイル名が失われてしまいます。
ローカルホストと S3 ホストのファイルは同じように動作するべきだと考えますが、同意されますか?あなたの提案では、S3 ホストのアップロード(新規のものだけでなく、移行されたものも含む)の機能が完全に逆転してしまいます。
以下に詳細なケーススタディと、なぜ私の提案が正しいのか(つまり、ローカルと S3 の両方でホストされているアップロードの機能を維持するものなのか)を説明します。
ローカルホストのファイル
私は音声(スピーチ)ファイルの大容量(5,000 以上)のリポジトリを持っており、サイズは 1〜10MB、合計約 40GB です。これらは現在ローカルストレージにホストされていますが、S3 へ移行されています(これは設計上のもので、サードパーティのサービスにホストしたくありません)。パフォーマンスの観点からはすでに非常にうまく機能していますが、ストレージコストの上昇と S3 を使用した CDN の利用オプションにより、S3 への移行が理にかなっています。
これらのファイルはサイズ最適化されており、ストリーミング用ではなく、ダウンロードしてローカルで再生する(帯域幅や接続性が限られたクライアント向け)ことを想定しています。ファイルはバッチでアップロードされ、それぞれの SHA1 値から生成されたリンクを使用して生投稿内で参照されます:[dl_link](https://discourse.forum.tld/uploads/default/original/3X/0/1/0123..sha1.mp3)。ファイルへの直接リンクをクリックすることで、元のファイル名でダウンロードできます(例はこちらを参照:here)。
一方、これらのリンクがワンボックス化されている場合、Discourse サーバーから直接ストリーミングすることも可能です(プレイヤーコントロールからもダウンロード可能で、これも元のファイル名になります)。
S3 に移行されたファイル
ローカルストレージから S3 へアップロードを移行する際、uploads:migrate_to_s3 を実行すると以下の 2 点が行われます。
- 画像以外のすべてのアップロードに対して
content-disposition: attachment; filename=Xが設定される - 生投稿内の直接ローカルリンク
[dl_link](https://discourse.forum.tld/uploads/default/original/3X/0/1/0123..sha1.mp3)が S3 リンク[dl_link](https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3)に置き換えられる
これにより、ダウンロードリンクに元のファイル名が含まれること、およびワンボックス機能などが、ローカルホストのアップロードと完全に同じように動作します。
S3 に新しくアップロードされたファイル
- すべてのメディアファイルに対して
content-disposition: attachment; filename=Xが設定されない - 新しくアップロードされたファイルは生投稿ではショート URL で参照されるが、調理済みリンクは引き続き
https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3を直接指す - ショート URL リンクまたは手動で挿入された S3 リンク
[dl_link](https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3)をクリックすると、ダウンロードではなく新しいタブでファイルが開いてしまう
content-disposition が設定されていないため、これはローカルストレージから提供されるメディアファイルの動作と異なります(ワンボックス機能は依然として機能しますが、元のファイル名を持つダウンロードリンクはもう利用できません)。
追加情報が必要な場合はお知らせください。