requestやsuperagentなどを使用して、base64 のファイルを http エンドポイントにストリーミングする必要があります。ファイルの何パーセントがアップロードされたかを把握する最良の方法は何ですか?
次のようなものを使用して読み取りストリームを作成できると思います。
fs.createReadStream('/tmp/cats.jpg', {encoding: 'base64'})
上記のライブラリのいずれかを使用した例は、非常に高く評価されます。
requestやsuperagentなどを使用して、base64 のファイルを http エンドポイントにストリーミングする必要があります。ファイルの何パーセントがアップロードされたかを把握する最良の方法は何ですか?
次のようなものを使用して読み取りストリームを作成できると思います。
fs.createReadStream('/tmp/cats.jpg', {encoding: 'base64'})
上記のライブラリのいずれかを使用した例は、非常に高く評価されます。
同様の問題に対する回答を探していましたが、Alberto Zaccagni の回答のおかげで、いくつかのコードを機能させることができました。
したがって、自分でパズルを解きたくない人のために、コードを次に示します (Stackoverflow 用に編集)。
var zipfile = "my_large_archive.zip";
// Get the size of the file
fs.stat(zipfile, function (err, stats) {
var zipSize = stats.size;
var uploadedSize = 0; // Incremented by on('data') to keep track of the amount of data we've uploaded
// Create a new read stream so we can plug events on it, and get the upload progress
var zipReadStream = fs.createReadStream(zipfile);
zipReadStream.on('data', function(buffer) {
var segmentLength = buffer.length;
// Increment the uploaded data counter
uploadedSize += segmentLength;
// Display the upload percentage
console.log("Progress:\t",((uploadedSize/zipSize*100).toFixed(2)+"%"));
});
// Some other events you might want for your code
zipReadStream.on('end', function() {
console.log("Event: end");
});
zipReadStream.on('close', function() {
console.log("Event: close");
});
var formData = require('form-data');
var form = new formData();
form.append('apikey', 'f4sd5f4sdf6ds456'); // Just some post parameters I need to send to the upload endpoint
form.append('file', zipReadStream); // The zip file, passed as a fs.createReadStream instance
// Submit the form and the file
form.submit('http://www.someserver.com/upload', function(err, res) {
if (err) {
console.log("Oups! We encountered an error :(\n\n", err);
return false;
}
console.log("Your file has been uploaded.");
res.resume(); // Fix is you use that code for a CLI, so that the execution will stop and let users enter new commands
});
});
nodejs にはReadable streamがあり、データのチャンクを受信するとdata
イベントを発行します。ファイル サイズを知ることで、イベント レシーバーを通過するデータの量を簡単に追跡しdata
、パーセンテージを更新できます。
ファイルの次元を取得します
require('fs').watchFile('yourfile', function () {
fs.stat('yourfile', function (err, stats) {
console.log(stats.size);
});
});