Как заставить загрузку вместо открытия файла srt в Chrome с FTP-сервера, используя Javascript / jQuery? - PullRequest
0 голосов
/ 09 сентября 2018

Мне нужно скачать файл srt с FTP-сервера, и я использую этот код:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
    $(document).ready(function(){
        $("a").bind('click', function () {
            var a = document.createElement("a");
            a.href = 'ftp://192.168.1.1/mytextfile.srt';
            a.download = 'mytextfile.srt';
            a.click();
        });
    });
</script>
<html>
    <a>Download</a>
</html>

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

Мне нужно сделать это в javascript / jQuery, а не в php.

1 Ответ

0 голосов
/ 09 сентября 2018

Вы не можете манипулировать заголовками HTTP с FTP-сервера, FTP предоставляет только данные. Поэтому вы не можете использовать атрибут download или заголовок Content-Disposition.

Это означает, что браузер Chrome должен решить, как обращаться с файлом, разорванным через FTP. Я предлагаю вам обслуживать свои файлы с HTTP-сервера вместо использования FTP.

После этого вы можете установить заголовок Content-Disposition в ответе как attachment на стороне сервера:

Content-Disposition: attachment; filename="filename.srt"

или используйте атрибут download привязки HTML5 , но помните:

  • Хотя URL-адреса HTTP (s) должны быть одного и того же происхождения , blob: URL-адреса и данные разрешены, чтобы можно было загружать содержимое, сгенерированное JavaScript.
  • Если заголовок HTTP Content-Disposition: дает другое имя файла, чем этот атрибут, заголовок HTTP имеет приоритет над этим атрибутом.
  • Если для Content-Disposition: установлено значение inline, Firefox отдает приоритет Content-Disposition, как регистр имени файла, в то время как Chrome устанавливает приоритет для атрибута загрузки.
...