特に、ユーザーがサーバーにファイルをアップロードできるWebアプリケーションを作成しています。名前の衝突を防ぎ、ファイルを整理するために、ファイルがサーバーに配置されたら名前を変更します。元のファイル名を追跡することで、バックエンドでファイル名を変更したことを知らずにファイルの所有者と通信できます。つまり、彼らが行くまでファイルをダウンロードします。その場合、なじみのない名前のファイルをダウンロードするように求められます。
私の質問は、HTMLだけを使用してダウンロードするファイルの名前を指定する方法はありますか?そのため、ユーザーは「abc.txt」という名前のファイルをアップロードし、「xyz.txt」に名前を変更しますが、ダウンロードするときはデフォルトで「abc.txt」としてファイルを保存する必要があります。これがHTMLだけでは不可能な場合、それを行う方法はありますか?
HTMLで方法を見つけることができません。 content-dispositionヘッダーを出力するサーバー側のスクリプトが必要になると思います。 PHPでは、これは次のように行われます。
header('Content-Disposition: attachment; filename="downloaded.pdf"');
自動ダウンロードではなくデフォルトのファイル名を提供したい場合、これは機能しているようです。
header('Content-Disposition: filename="filetodownload.jpg"');
実際、ファイルを直接提供しているのはサーバーであるため、HTMLはまったく関与していないため、HTMLからファイルを操作する方法はありません。
ボタンをクリックしてファイルをダウンロードするときに、デフォルトのファイル名を設定できる HTML5属性download
を追加できます。
Xlsxファイルを作成し、ブラウザがZipファイルとして保存したいときに、それが私がしたことです。
<a href="path/to/file" download="renamed.txt">Download</a>
<a href="downloads/export.xlsx" download="Data-Export.xlsx">Download Export</a>
download
属性を使用すると非常に簡単です!こちらが私のcodepenデモです。
https://codepen.io/xgqfrms/full/GyEGzG/
私の画面のショートカット。
gif
デモを追加します。
これはサーバー側で行う必要があります。古いファイル名をデータベースのどこかに保存する必要があります。その後、正しい名前で一時フォルダーに移動し、そのファイルをユーザーに送信できます。 TBQHサブディレクトリとの名前の衝突を避け、古い名前/新しい名前の代わりにデータベースの各ファイルへのパスを保存することを検討すべきだと思います。
さて、@ Palantirの答えは、私にとっては、最も正しい方法です!
それを複数のファイルで使用する予定がある場合は、PHP Download Manager。
[〜#〜] but [〜#〜]、1つまたは2つのファイルにしたい場合は、Iをお勧めしますmod_rewriteオプション:
htdocsフォルダーに.htaccessファイルを作成または編集し、これを追加する必要があります。
RewriteEngine on
RewriteRule ^abc\.txt$ xyz.txt
このコードを使用すると、ユーザーはxyz.txtデータを名前=abc.txtでダウンロードします
注:ファイルに既に「RewriteEngine on」が存在するかどうかを確認し、存在する場合はsecondのみを追加しますリダイレクトするファイルごとに。
Good Luck;)(申し訳ありませんが私の英語)