kjb
kjb

Reputation: 3165

Downloading a file sent in response to a POST request via nodejs?

I'm having trouble issuing a POST command that downloads a file.

On the client side, I'm trying to POST to a specific URL, including a param that specifies the file to download.

var req = $.ajax({
    type: 'POST',
    url : '/click',
    data: { 'path' : filename }
   });
req.done(function(data) {
// Download the file here?

The server eventually fires off a method which does this:

function downloadFile(req, res) {
  var dir = req.session.currentdir + req.body.path;
  mimetype = (shell.exec("file --mime-type '" + dir + "'", {silent:true}).output);
  mimetype = mimetype.substring(mimetype.indexOf(": ") + 2, mimetype.length);

  var stat = fs.statSync(dir);
  res.writeHead(200, {'Content-Type' : mimetype,
                      'Content-Length': stat.size });
  var fileStream = fs.createReadStream(dir);
  fileStream.pipe(res);
};

Now I can't seem to get the client side to accept the file I'm trying to pipe back . . it just hangs for an incredibly long time before closing. What is the appropriate way to get the client to download the file I'm trying to send back?

Much thanks for taking the time to read.

Upvotes: 3

Views: 8732

Answers (1)

neohope
neohope

Reputation: 1832

1. resp.setHeader( "Content-Disposition", "attachment; filename=\"xxxx.xxx\"" );

2. better to use Get

Upvotes: 5

Related Questions