Как установить имя файла, загруженного из браузера?
Я пишу веб-приложение, которое, среди прочего, позволяет пользователям загружать файлы на мой сервер. Чтобы предотвратить конфликты имен и организовать файлы, я переименую их, как только они будут помещены на мой сервер. Следя за исходным именем файла, я могу связаться с владельцем файла, не зная, что я изменил имя файла на задней панели. То есть, пока они не отправятся, загрузите файл. В этом случае им будет предложено загрузить файл с незнакомым именем.
Мой вопрос в том, есть ли способ указать имя файла для загрузки, используя только HTML? Поэтому пользователь загружает файл с именем "abc.txt", и я переименовываю его в "xyz.txt", но когда он загружается, я хочу, чтобы браузер сохранял файл как "abc.txt" по умолчанию. Если это невозможно с помощью только HTML, есть ли способ сделать это?
Ответы
Ответ 1
Невозможно найти способ в HTML. Я думаю, вам понадобится серверная сторона script, которая выведет заголовок содержимого. В php это делается следующим образом:
header('Content-Disposition: attachment; filename="downloaded.pdf"');
если вы хотите указать имя файла по умолчанию, но не автоматическую загрузку, это работает.
header('Content-Disposition: filename="filetodownload.jpg"');
Фактически, сервер напрямую обслуживает ваши файлы, поэтому у вас нет возможности взаимодействовать с ним из HTML, так как HTML вообще не участвует.
Ответ 2
Когда они нажимают кнопку для загрузки файла, вы можете добавить атрибут 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>
Ответ 3
Ну, @Palantir ответ для меня, самый правильный способ!
Если вы планируете использовать это с несколькими файлами, я предлагаю вам использовать (или создать) PHP Download Manager.
НО, если вы хотите сделать это с одним или двумя файлами, я предлагаю вам вариант mod_rewrite:
Вам нужно создать или отредактировать файл .htaccess в папке htdocs и добавить это:
RewriteEngine on
RewriteRule ^abc\.txt$ xyz.txt
С помощью этого кода пользователи загружат данные xyz.txt с именем abc.txt
ПРИМЕЧАНИЕ. Убедитесь, что у вас уже есть "RewriteEngine on" в вашем файле, если да, добавьте только второй для каждого файла, который вы хотите перенаправить.
Удача;)
(Извините за мой английский)
Ответ 4
Это нужно сделать на стороне сервера. Вам нужно будет иметь старое имя файла в базе данных где-нибудь, а затем вы можете переместить его в временную папку с правильным именем и отправить этот файл пользователю. TBQH Я думаю, вам следует избегать конфликтов имен с подкаталогами и сохранить путь к каждому файлу в вашей базе данных вместо старого имени/нового имени.
Ответ 5
это очень легко, используя атрибут HTML5 download
!
вот моя демонстрация codepen.
https://codepen.io/xgqfrms/full/GyEGzG/
мой ярлык на экране.
![введите описание изображения здесь]()