Reputation: 2757
Trying to send simple text string as a file, that being downloaded under certain name upon request. Can't seems to figure out why this code fails.
var text_ready = "This is a content of a txt file."
res.setHeader('Content-type', "application/octet-stream");
res.setHeader('Content-disposition', 'attachment; filename=file.txt');
res.send( new Buffer(text_ready) );
When this code executes, I receive only a XHR response (with that string as a content), but no download is being initiated. But I expected that receiveing this response will force browser to download a file with file.txt
as a name having content of the string above.
How to fix that? What am I doing wrong?
Maybe it will be important: working under Chrome 41 on Windows.
EDIT: it seems that I have to describe a bit deeper. The workflow is the following:
ng-click
events attached to each of themUpvotes: 8
Views: 11392
Reputation: 1663
Tested on my node.js version 0.12.2, Windows 7, Chrome and Firefox
var http = require('http');
http.createServer(function (req, res) {
var text_ready = "This is a content of a txt file."
res.writeHead(200, {'Content-Type': 'application/force-download','Content-disposition':'attachment; filename=file.txt'});
res.end( text_ready );
}).listen(8080, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8080/');
I think that you're not running the latest version of node.js. Maybe you can change only Content-type header, which might work. Also, you can use res.end( new Buffer(text_ready) );
. I've tested it.
EDITED: How to download file from node.js with javascript(jQuery onclick) call:
Javascript:
<script type="text/javascript">
$(document).ready(function(){
$("#button").on('click',function(){
window.location = 'http://127.0.0.1:1337/';
});
});
</script>
HTML:
<button id="button">Download</button>
I'm sure you know how to rewrite from jQuery to angularJS. :) I think that this is better than using an Ajax call. If you really need Ajax, I'll find out how to do it.
Upvotes: 15