2

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>

また、上記のエラーが発生した後、ファイルのアップロードが再び開始されますが、それでも失敗することに言及する必要があると思います。繰り返しますが、小さいファイルは問題ありません。私の質問は、この方法で大きなファイルを効果的にストリーミングするにはどうすればよいですか、またはこれを行うためのより良い方法はありますか? ありがとう。

4

0 に答える 0