Как скачать файл с javascript?

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

rootFolder
-JS file
-HTML file
-download file (`sample.csv`)

Как мне создать загрузочный link? Я пробовал до сих пор с: <a download = "sample.csv"></a> Я также пытался использовать событие onclick:

<a download = "sample.csv" onclick = "download()"></a>

function download|(){
   .....code that calls the `api`
}

Я не знаю, как подходят эти 2: the download API, если он есть, и обработчик событий click, если вы планируете делать дополнительную логику при загрузке.

«Пока что он будет у меня в локальном хранилище» - вы на самом деле имеете в виду developer.mozilla.org/en-US/docs/Web/API/Window/localStorage‌​, или вы просто говорите о том, что файл находится в файловой системе сервера в том месте, где вы описали?
04FS 11.02.2019 09:33

Файл находится в файловой системе сервера в том месте, которое я описал.

Bercovici Adrian 11.02.2019 09:34

Хорошо, тогда вам просто нужно сделать все правильно, и это должно работать ... Вам все еще нужно использовать атрибут href ссылки для ссылки на файл; download — это дополнительный атрибут, который вы добавляете. developer.mozilla.org/en-US/docs/Web/HTML/Element/a#Атрибуты

04FS 11.02.2019 09:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
3
38 182
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете предоставить ссылку на эту функцию для загрузки файла:

function downloadURI(uri, name) 
{
    var link = document.createElement("a");
    link.download = name;
    link.href = uri;
    link.click();
}

А если файл лежит в моем локальном хранилище, то все равно работает?

Bercovici Adrian 11.02.2019 09:07

что именно вы подразумеваете под локальным хранилищем? вы не используете какой-либо локальный сервер?

saibbyweb 11.02.2019 09:09

Вы можете сделать это через HTML <a href = "/path/to/sample.csv"></a>, но если вам нужно сделать это в JS, есть библиотека https://github.com/eligrey/FileSaver.js/.

поскольку ответ от @saibbyweb не работает во всех браузерах, когда я пишу это, я рекомендую другое, но похожее решение, проверенное и работающее в последних (на момент написания) Firefox, Chrome, Opera, Edge, Safari, мобильном Safari, мобильном Chrome :

function downloadUrl(url){
    window.open(url, '_self');
}

Излишне говорить, что вы также можете открывать ссылки в новых вкладках с помощью _blank вместо _self, но вы потенциально пугаете блокировщиков всплывающих окон, открывая новые вкладки/окна с помощью Javascript.

Другие вопросы по теме