web-dev-qa-db-ja.com

ブラウザからダウンロードしたファイルの名前を設定する方法は?

特に、ユーザーがサーバーにファイルをアップロードできるWebアプリケーションを作成しています。名前の衝突を防ぎ、ファイルを整理するために、ファイルがサーバーに配置されたら名前を変更します。元のファイル名を追跡することで、バックエンドでファイル名を変更したことを知らずにファイルの所有者と通信できます。つまり、彼らが行くまでファイルをダウンロードします。その場合、なじみのない名前のファイルをダウンロードするように求められます。

私の質問は、HTMLだけを使用してダウンロードするファイルの名前を指定する方法はありますか?そのため、ユーザーは「abc.txt」という名前のファイルをアップロードし、「xyz.txt」に名前を変更しますが、ダウンロードするときはデフォルトで「abc.txt」としてファイルを保存する必要があります。これがHTMLだけでは不可能な場合、それを行う方法はありますか?

46
Sparafusile

HTMLで方法を見つけることができません。 content-dispositionヘッダーを出力するサーバー側のスクリプトが必要になると思います。 PHPでは、これは次のように行われます。

header('Content-Disposition: attachment; filename="downloaded.pdf"');

自動ダウンロードではなくデフォルトのファイル名を提供したい場合、これは機能しているようです。

header('Content-Disposition: filename="filetodownload.jpg"');

実際、ファイルを直接提供しているのはサーバーであるため、HTMLはまったく関与していないため、HTMLからファイルを操作する方法はありません。

58
Palantir

ボタンをクリックしてファイルをダウンロードするときに、デフォルトのファイル名を設定できる 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>
44
Mephiztopheles

hTML5 download属性を使用すると非常に簡単です!

こちらが私のcodepenデモです。

https://codepen.io/xgqfrms/full/GyEGzG/

私の画面のショートカット。

enter image description here

gifデモを追加します。

enter image description here

1
xgqfrms

これはサーバー側で行う必要があります。古いファイル名をデータベースのどこかに保存する必要があります。その後、正しい名前で一時フォルダーに移動し、そのファイルをユーザーに送信できます。 TBQHサブディレクトリとの名前の衝突を避け、古い名前/新しい名前の代わりにデータベースの各ファイルへのパスを保存することを検討すべきだと思います。

0
Segfault

さて、@ 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;)(申し訳ありませんが私の英語)

0
cusspvz