複数のファイルBlob
を XHR2 経由で Node.js/Express サーバーにチャンクして送信します。
それらが正しくまとめられていることを確認しながら、サーバーでそれらを受信するにはどうすればよいですか? 複数のファイルが「一度に」アップロードされる場合、正しい順序で正しいファイルに。
以下は、私がこれまでに持っているコード (フロントエンドとバックエンドの両方) ですが、まだ複数のアップロードを考慮していません。
フロントエンド:
// 'files' is of type FileList, directly from file input.
for (var i = 0, length = files.length; i < length; i++) {
var file = files[i];
var bytes = 51200; // 50 KB
var size = file.size;
var start = 0;
var end = bytes;
while (start < size) {
sendBlob(file.slice(start, end), file.name, file.type);
start = end;
end = start + bytes;
}
}
// sendBlob()
var sendBlob: function (data, filename, filetype) {
var xhr = new XMLHttpRequest();
xhr.open('POST', this.url, false);
xhr.setRequestHeader('X_FILENAME', filename);
xhr.setRequestHeader('Content-Type', filetype);
xhr.send(data);
};
バックエンド:
app.post('/', function (req, res) {
var body = '';
req.on('data', function (data) {
body += data;
});
req.on('end', function () {
var filename = req.headers['x_filename'];
var newPath = __dirname + '/upload/' + filename;
fs.writeFile(newPath, body, function (err) {
res.send({
filename: filename
});
});
});
});
非常に小さなテキスト ファイルは正しく保存されますが、画像は常に混乱し、最終的にファイル サイズが大きくなるようです。より大きなテキスト ファイルは正しく書き込まれますが、最初のチャンクが欠落しているようです。