Как установить имя файла, загруженного из браузера? - PullRequest
45 голосов
/ 23 июня 2010

Я пишу веб-приложение, которое, помимо прочего, позволяет пользователям загружать файлы на мой сервер. Чтобы предотвратить конфликт имен и организовать файлы, я переименовываю их, как только они помещаются на мой сервер. Отслеживая исходное имя файла, я могу общаться с владельцем файла, даже не зная, что я изменил имя файла на серверной части. То есть, пока они не пойдут, загрузите файл. В этом случае им предлагается загрузить файл с незнакомым именем.

У меня вопрос, есть ли способ указать имя файла для загрузки, используя только HTML? Таким образом, пользователь загружает файл с именем «abc.txt», и я переименовываю его в «xyz.txt», но когда он загружает его, я хочу, чтобы браузер по умолчанию сохранил файл как «abc.txt». Если это невозможно с помощью только HTML, есть ли способ сделать это?

Ответы [ 5 ]

54 голосов
/ 23 июня 2010

Не удается найти путь в HTML. Я думаю, вам понадобится серверный скрипт, который будет выводить заголовок размещения контента. В php это делается так:

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

Если вы хотите указать имя файла по умолчанию, но не автоматическую загрузку, похоже, это работает.

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

Фактически, именно сервер напрямую обслуживает ваши файлы, поэтому вы не можете взаимодействовать с ним из HTML, поскольку HTML вообще не задействован.

43 голосов
/ 06 февраля 2015

Когда они нажимают кнопку, чтобы загрузить файл, вы можете добавить атрибут 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>
1 голос
/ 02 января 2018

это очень просто, используя атрибут HTML5 download!

вот мой кодовый блок демо.

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

ярлык моего экрана.

enter image description here

добавить gif демо.

enter image description here

0 голосов
/ 23 июня 2010

Ну, ответ @ Palantir, для меня, самый правильный путь !

Если вы планируете использовать это с несколькими файлами, то я предлагаю вам использовать (или сделать один) PHP Download Manager.

НО , если вы хотите сделать это с одним или двумя файлами, Я предложу вам параметр mod_rewrite :

Вы должны создать или отредактировать файл .htaccess в папке htdocs и добавить его:

RewriteEngine  on 
RewriteRule ^abc\.txt$  xyz.txt

С этим кодом пользователи будут загружать xyz.txt данные с именем abc.txt

ПРИМЕЧАНИЕ. Убедитесь, что в вашем файле уже есть " RewriteEngine на ", если да, добавьтетолько секунд для каждого файла, который вы хотите перенаправить.

Удачи ;) (простите за мой английский)

0 голосов
/ 23 июня 2010

Это должно быть сделано на стороне сервера.Вам нужно будет где-то иметь старое имя файла в базе данных, а затем вы можете переместить его во временную папку с правильным именем и отправить этот файл пользователю.TBQH Я думаю, вам следует избегать конфликтов имен с подкаталогами и сохранять путь к каждому файлу в вашей базе данных вместо старого имени / нового имени.

...