title: "How to write a file / give it to the user" layout: default
With only javascript, this part won't work in old browsers, including IE < 10. For those browsers, you can use a flash polyfill, see below.
You can also see this example.
With recent browsers, the easiest way is to use saveAs
or a polyfill, see
FileSaver.js :
var blob = zip.generate({type:"blob"});
saveAs(blob, "hello.zip");
Under the hood, the polyfill uses the native saveAs
from the
FileSaver API
(on Chrome and IE10+) or use a Blob URL
(on Firefox).
For older browsers that support data URI, you can also do the following :
location.href="data:application/zip;base64," + zip.generate({type:"base64"});
The biggest issue here is that the filenames are very awkward, Firefox
generates filenames such as a5sZQRsx.zip.part
(see bugs
367231 and
532230, and Safari
isn't much better with just Unknown
.
Browser support and resulting filename :
Opera | Firefox | Safari | Chrome | Internet Explorer |
---|---|---|---|---|
"default.zip" | random alphanumeric with ".part" extension | "Unknown" (no extension) | "download.zip" on OSX and Linux, just "download" on Windows | No |
Downloadify uses a small Flash SWF
to download files to a user's computer with a filename that you can choose.
Doug Neiner has added the dataType
option to allow you to pass a zip for
downloading. Follow the Downloadify demo
with the following changes:
zip = new JSZip();
zip.file("Hello.", "hello.txt");
Downloadify.create('downloadify',{
...
data: function(){
return zip.generate({type:"base64"});
},
...
dataType: 'base64'
});
Franz Buchinger has written a brilliant tutorial on using JSZip with Google Gears (part 2). If you want to let your Gears users download several files at once I really recommend having a look at some of his examples.
JSZip can generate Buffers so you can do the following :
var fs = require("fs");
var JSZip = require("jszip");
var zip = new JSZip();
// zip.file("file", content);
// ... and other manipulations
var buffer = zip.generate({type:"nodebuffer"});
fs.writeFile("test.zip", buffer, function(err) {
if (err) throw err;
});