Javascript переименовать файл при загрузке - PullRequest
11 голосов
/ 15 сентября 2011

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

Пример: Файл: http://<server>/<site>/test.txt

и когда я нажимаю, чтобы загрузить файл, открывается диалоговое окно загрузки с именем файла: test001.txt.

Как мне этого достичь?

Ответы [ 6 ]

16 голосов
/ 12 апреля 2013

Как предлагает InviS, теперь в ссылках есть атрибут download.

Пример:

<a href="http://server/site/test.txt" download="test001.txt">Download Your File</a>
2 голосов
/ 20 июля 2012

Использовать download атрибут ссылки.Но это работает только в браузере Chrome:)

2 голосов
/ 15 сентября 2011

Этот эффект достигается отправкой дополнительного заголовка.Например, для этого можно использовать PHP:

URL-адреса могут быть переписаны с использованием .htaccess, (внутренне) перенаправляя запрос в файл PHP.Я покажу простой жестко заданный пример того, как можно установить заголовок:

<?php
    header('Content-type: text/plain');
    header('Content-Disposition: attachment; filename="test001.txt"');
    readfile('files/test.txt');
     //assuming that the files are stored in a directory, not in a database
?>
0 голосов
/ 18 мая 2019

Вы можете использовать атрибут загрузки для тега ссылки <a href="http://server/site/test.txt" download="test001.txt">Download Your File</a>

Однако, когда заголовок размещения содержимого установлен в ответе сервера, он будет игнорировать атрибут загрузки и имя файла будет установлено наимя файла в заголовке ответа на размещение содержимого

Это можно сделать с помощью axios или любой другой выборки, выполнив следующее:

const downloadAs = (url, name) => {
  Axios.get(url, {
    headers: {
      "Content-Type": "application/octet-stream"
    },
    responseType: "blob"
  })
    .then(response => {
      const a = document.createElement("a");
      const url = window.URL.createObjectURL(response.data);
      a.href = url;
      a.download = name;
      a.click();
    })
    .catch(err => {
      console.log("error", err);
    });
};

использование:

downloadAs('filedownloadlink', 'newfilename');

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

0 голосов
/ 15 сентября 2011

Если вы хотите вернуть непрерывный тип имени файла, вы должны написать скрипт, который будет отслеживать это и предоставлять этот файл пользователю.Одним из способов является использование простого PHP или чего-то более продвинутого, если это несколько файлов одновременно, возможно, вызов cURL в php, чтобы он мог генерировать несколько разных файлов.Я предполагаю, что именно это вы и делаете, но вы не можете динамически изменять имя файла в окне сохранения в этом смысле, вы возвращаете имя файла savename.txt.

0 голосов
/ 15 сентября 2011

Вы не можете сделать это в Javascript.Диалог «Сохранить в» открывается браузером, и вы не можете получить к нему доступ через JS, это стандартный диалог из ОС.

Ваш сервер должен предоставить файлу желаемое имя перед тем, как пользовательнажимает на ссылку для скачивания.

По какой причине вы все равно хотите переименовать загруженный файл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...