Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send text as a download file

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:

  • page contains a table cells with angular ng-click events attached to each of them
  • when clicking a GET request is being sent to "/download" using jQuery's $.get("/download")
  • server have route to handle this GET requests
  • what I need to achieve is that a certain text string is being send to user and saved as a file (so that a download is being initiated upon click, shortly speaking)

testings

  1. It works when I navigate manually to that url by entering this url to address bar and pressing enter
  2. It does not work when I click with mouse on that cell - the request is sent, the response is received but no download is initiated.
like image 412
kaytrance Avatar asked Apr 10 '15 08:04

kaytrance


People also ask

Can text messages be downloaded?

Detailed Steps to save text messages - Android Open Gmail and enable IMAP. Install and launch SMS Backup+. Choose "connect" and allow access to your contacts. Accept the "send and view permissions for SMS" prompt.

Can I send files via text message?

Open a new message and click on the attachment button. Choose your desired file format in the new window. Next, pick the picture or file (depending on your operating system) you want to send. Insert your recipient and text and there you go!


1 Answers

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.

like image 85
Kristiyan Avatar answered Sep 26 '22 02:09

Kristiyan