gridfs-streamノードモジュールを介したGridfsへの大きなファイルのアップロードに問題があります。小さなファイルをアップロードしようとしましたが、うまく機能していますが、大きなファイル (~2GB 以上) をアップロードしようとすると、node.js サーバーから次のエラーが返されます:
Error: Request aborted
at IncomingMessage.onReqAborted (D:\ProjectName\node_modules\express\node_modules\connect\node_modules\multiparty\index.js:131:17)
at IncomingMessage.EventEmitter.emit (events.js:92:17)
at abortIncoming (http.js:1911:11)
at Socket.serverSocketCloseListener (http.js:1923:5)
at Socket.EventEmitter.emit (events.js:117:20)
at TCP.close (net.js:466:12)
私のコードは次のとおりです。また、これはすべてローカルノードサーバーで行われます。
//crud.js file
var config = require('./config.js')
var fs = require('fs')
var Grid = require('gridfs-stream');
var gfs = Grid(config.db, config.mongo);
exports.uploadFile = function (req, res) {
var tempfile = req.files.filename.path;
var origname = req.files.filename.name;
var writestream = gfs.createWriteStream({ filename: origname });
fs.createReadStream(tempfile)
.on('end', function () {
res.send('<p><h1>Upload Complete!</h1><p>');
}).on('error', function () {
res.send('Error, upload failed!');
}).pipe(writestream);
}
そして私のメインのserver.jsファイル:
app.configure(function () {
app.use(express.compress());
app.use('/', express.static(__dirname + '/upload'));
app.set('view engine', 'html');
app.use(express.logger('dev'));
app.use(express.bodyParser({limit: '1000000mb'}));
app.use(express.methodOverride());
app.use(app.router);
});
app.post('/', crud.uploadFile)
そして最後に私のクライアント:
<div class="col-lg-4">
<form id="form" method="post" action="" enctype="multipart/form-data">
<input type="file" id="file" name="filename" class="btn btn-warning">
<br>
<input type="submit" value="Upload file" class="btn btn-primary">
</form>
</div>
また、上記のエラーが発生した後、ファイルのアップロードが再び開始されますが、それでも失敗することに言及する必要があると思います。繰り返しますが、小さいファイルは問題ありません。私の質問は、この方法で大きなファイルを効果的にストリーミングするにはどうすればよいですか、またはこれを行うためのより良い方法はありますか? ありがとう。