2015-01-15 2 views
-2

Я создаю файл csv с узлом js и теперь хочу загрузить его в папку загрузки по умолчанию браузера пользователя. Мы используем seneca с nodejs, а файл csv сохраняется на сервере. Теперь, когда использование будет щелкнуть экспорт на лицевой стороне, на основе угла, узел создаст csv и загрузит его на пользовательскую машину. Как мы можем достичь этого?Загрузить файл с NodeJS

ответ

0

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

1

Можно загружать динамические файлы сгенерированный с помощью Node.js в местоположение загрузки по умолчанию браузера. Существует много сообщений о том, как извлекать статические файлы с сервера с помощью утилиты Express helper res.download(). Конкретный для вашего вопроса есть способ достичь того, что вы просите.

С интерпретации вашего вопроса следующий процесс следует:

  1. Пользователь генерироваться данные отправляются на сервер для обработки, когда пользователь нажимает на экспорт.
  2. Узел обрабатывает данные и генерирует файл, который должен быть загружен без участия второго пользователя (пользователь нажимает «Экспорт» и файл загружается).

    • Client

      //Export button 
      $("#exportBtn").click(function() { 
      //Code to generate data for the CSV and save it to the src variable 
      var src = csvData; 
      
          //Send the CSV data to Node for processing and file generation. 
          $.post("http://localhost:3000/submitcsv", { csv: src }, function (data) { 
           //Check the returned file name in data - this check depends on your needs; ie: regex 
           if (data) { 
            //request the file that is to be downloaded to the client. Optionally use $window.open() 
            window.location.href = "http://localhost:3000/app/" + data; 
           } 
          }); 
      }); 
      
    • Сервер

      //Post data from the client 
      app.post('/submitcsv', function (req, res) { 
          var async = require('async'); 
      
          var fs = require('fs'); 
          var path = require('path'); 
      
          var csvData = req.body.csv; 
      
          function processCSV(callback) { 
           //Code to create the csv file and a uniqueIdentifier 
           callback(); 
          } 
      
          function finalize() { 
           //Save the CSV to the server. This is a specific location on the server in /app. 
           //You can use Express.static paths that suit your setup. 
           fs.writeFile('./app/temp/csvFile' + uniqueIdentifier + '.csv', buf, function (err) { 
            if (err) { 
             console.log(err); 
             res.send(500, "Something went wrong..."); 
            } 
            else { 
             console.log("CSV file is saved"); 
             //Send the file name and location back to the client 
             res.send('/temp/csvFile' + uniqueIdentifier + '.csv'); 
            } 
           }); 
          } 
          // After the CSV data is processed, save the file and send it to the client. 
          async.series([ 
           processCSV 
          ], finalize); 
      }); 
      
      //Send the requested file back to the client 
      app.get('./app/:csvFile', function (req, res){ 
          var c = req.params.csvFile; 
          res.download(c); 
          //Code to delete the file if it is temporary via fs.unlink 
      }); 
      

Хотя это не показано в приведенном выше коде для simplicty, рекомендуется в/приложение маршрутов отправка и получение данных такого типа обеспечивается в сомах e способ. Использование Passport OIDCStrategy для защищенных маршрутов будет выглядеть примерно так:

app.all('/app/*', function(req, res, next) { 
    //Check that the user has previously been authenticated 
    if (req.user){ 
     next(); 
    } else { 
    // require the user to log in 
    res.redirect("/login"); 
    } 
}); 
Смежные вопросы