0

ファイルに直接書き込むと、受け入れ可能なzipファイルが得られる非常にきれいなバッファがあることを私は知っています。

fs.writeFile("acceptable.zip", prettyBuffer);
//file acceptable.zip is a valid zip file

この非常に prettyBuffer をユーザーのダウンロードとして提供するにはどうすればよいですか?

私は試した

var uriContent = "data:application/zip," + prettyBuffer);  
window.open(uriContent)

var uriContent = "data:application/octet-stream," + prettyBuffer);  
window.open(uriContent)

エンコーディングが異なる少なくとも 10 のバリエーションがあり、それでも機能しません!

編集:

これが私のコードです

var AdmZip = require('adm-zip');
var zip = new AdmZip();  
zip.addFile("row0", new Buffer("hi"), "comment");  
var prettyBuffer = zip.toBuffer()
var uriContent = "data:application/zip;base64," + prettyBuffer.toString('base64');

var encodedUri = uriContent;  
var link = document.createElement("a");  
link.setAttribute("href", encodedUri);  
link.setAttribute("download", "acceptable.zip");  
link.click(); 
4

2 に答える 2

0

base64 でエンコードします。

console.log('<a href="data:application/zip;base64,' + prettyBuffer.toString('base64') + '" download="acceptable.zip">');

downloadHTML5の新しい属性です。

この属性が存在する場合、作成者がハイパーリンクをリソースのダウンロードに使用することを意図していることを示します。属性に値がある場合、ブラウザーはそれを、作成者がローカル ファイル システム内のリソースのラベル付けに使用することを推奨するデフォルトのファイル名として解釈する必要があります。許可される値に制限はありませんが、ほとんどのファイル システムには、ファイル名でサポートされている句読点に関して制限があり、ブラウザーはそれに応じてファイル名を調整する可能性が高いことを考慮する必要があります。

これをdata:、 blob: 、および filesystem: の URL で使用すると、プログラムで生成されたコンテンツをユーザーが簡単にダウンロードできるようになります。

モジュールを使用する場合はhttp、バッファーを応答本文に書き込む必要があります。を使用しresponse.write()ます。

var http = require('http');

var prettyBuffer = ...;

http.createServer(function (req, res) {
  if (req.path == '/acceptable.zip') {
    res.writeHead(200, {
      'Content-Type': 'application/octet-stream',
      'Content-Length': prettyBuffer.length,
      'Content-Disposition': 'attachment; filename=acceptable.zip'
    });
    res.write(prettyBuffer);
    res.end();
  } else {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
  }
}).listen(1337, '127.0.0.1');

console.log('Server running at http://127.0.0.1:1337/');
于 2013-07-07T13:54:09.130 に答える
0

なぜ NodeJS で WINDOW を使用しているのですか?

1) 適切な応答ヘッダーを設定してみてください:

response.writeHead(200, {'Content-Type': 'application/zip'})

2) 次に、バッファを送信します。

response.end(buffer)

3) クライアント側では、次のようなものを使用します。

<a target="_blank" href="file_URL">Download file</a>
于 2013-07-07T13:55:21.713 に答える