Как скачать файл с nodejs на локальный компьютер? - PullRequest
0 голосов
/ 01 мая 2019

Я строю сервер и хочу разрешить загрузку файлов. FrontEnd с угловым - и у меня там службы БД.

BackEnd с NodeJS + экспресс.

У меня есть маршрутизатор и контроллер BE, и я написал код, который работает, но не для всех случаев.

Если я наберу в браузере URL для загрузки, скажем "http://localhost:3000/api/files/download/somefile" Все работает как положено, и файл загружается на мой компьютер.

но если я установил функцию в своем FE для вызова этой функции загрузки (скажем, после нажатия какой-либо кнопки) - она ​​не работает, и я получаю сообщение об ошибке: «Ошибка Http во время анализа для http://localhost:3000/api/files/download/some%20file"

Мои заголовки сервера, как я написал в app.js:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));


app.use((req, res, next) => {
    res.setHeader("Access-Control-Allow-Origin", "*");
    res.setHeader(
        "Access-Control-Allow-Headers",
        "Origin, X-Requested-With, Content-Type, Accept"
        );
        res.setHeader(
            "Access-Control-Allow-Methods",
            "GET, PUT, POST, PATCH, DELETE, OPTIONS"
            );
            next();
        });

моя функция на контроллере:

exports.downloadFile = (req, res, next) => {
var data = req.params.file;

fs.writeFile("temp.txt", data, (err) => {
    if (err){
 console.log("error: "+err);
}
    console.log("Successfully Written to File!");
    var filePath = "temp.txt"; 
    var fileName = "downloaded_file.txt"; 

    res.download(filePath, fileName, (err) => {
        console.log("download error: "+err)
    });
});

мой звонок в БД Сервис:

downloadExp(file: string) {      
   this.http.get("http://localhost:3000/api/files/download" + file) 
}

Что я делаю не так? как я могу разрешить загрузку из внешнего интерфейса после нажатия кнопки?

1 Ответ

0 голосов
/ 01 мая 2019

Я использую FileSaver в своем интерфейсе для загрузки файлов. Я знаю, что ответы только для ссылок не так хороши, но мой собственный код по сути такой же, как примеры в readme здесь. https://github.com/eligrey/FileSaver.js/

...