私はNodeJSのプロジェクトでファイルのアップロードを行っています。このコードは、単独で作業しないNodeJS Webアプリケーションファイルアップロードの開始オフファイルの先頭
app.post('/upload', function(req, res, next) {
if(req.xhr) {
console.log('Uploading...');
var fName = req.header('x-file-name');
var fSize = req.header('x-file-size');
var fType = req.header('x-file-type');
var ws = fs.createWriteStream('./'+fName)
req.on('data', function(data) {
console.log('DATA');
ws.write(data);
});
req.on('end', function() {
console.log('All Done!!!!');
});
}
});
が、私の残りの部分と組み合わせたとき:私が使用して、
$('#file-upload').bind('change focus click', function() {
var file = jQuery(this)[0].files[0];
if (file && file.fileName) {
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', onProgressHandler, false);
xhr.upload.addEventListener('load', transferComplete, false);
xhr.open('POST', '/upload', true);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('X-File-Name', encodeURIComponent(file.fileName));
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
xhr.send(file);
function onProgressHandler(evt) {
var percentage = event.loaded/event.total*100;
console.log(percentage);
}
function transferComplete(evt) {
console.log('Done');
}
}
});
とサーバー側で:アップロードは、コードをクライアント側で実行されますはるかに大きなプロジェクトは、それは大きなファイルの始まりを切り刻み、すべて一緒に小さなファイルを無視するようだ。小さなファイルをアップロードすると、console.log( 'DATA')は決して起動せず、大容量ファイルに対しては起動しますが、ファイルの先頭には実行されません。私は何らかの理由でそれがファイルを早く送信していると信じています。私の関数が最初にそれをピックアップするとき(または小さなファイルの場合は、全体が)すでに送信されています。しかし、私はこれを引き起こしているのか分かりません。
ありがとうございます!
私もこの問題を抱えていました。ファイルを保存して解決し、メタ情報をテーブルなどに保存するなどのその他の操作を処理します。 – Damodaran