ホームネットワークで使用するファイル共有アプリケーションを作成しました。 GoogleドライブやDropboxのウェブインターフェースと似ていますが、ファイルサイズの上限やセキュリティはありません。単純なNode.jsプログラムはすべてのシステムメモリを奪い、永遠にXMLHttpRequestファイルバッファをディスクに書き出します
LAN経由で接続されている他のコンピュータから小さなファイルをすぐに転送するときにはうまく動作しますが、2GBファイルでテストすると奇妙なことが起こります。
プログレスバーが50%になってから切断するまでに約4時間かかりました。また、Nodeが使用しているメモリの量を見てみましょう。
は、低オフを開始し、その後、ダンプと再起動、何回か分、13ギガバイトと同じくらいまでの道を構築します。
ファイルは、XMLHttpRequestを使用してブラウザインターフェイスからアップロードされます。これはフロントエンドコードの重要な部分です。
var formData = new FormData();
var file = document.getElementById("fileinput").files[0];
formData.append("file", file);
var xhr = new XMLHttpRequest();
xhr.open("post", "/fileupload", true);
xhr.send(formData);
そしてreq.files.file
を取り、ディスクに保存するfs.writeFileに直接渡しExpressを使用して、非常に単純なハンドラがあります、サーバー側で。 ( 'req.files.file'はconsole.logによるとBufferのように見えますが、これは明らかにpiped right onto diskです)。
var express = require("express");
var fileUpload = require("express-fileupload");
var app = express();
app.use(express.static("public"));
app.use(fileUpload());
var fs = require("fs");
app.post('/fileupload', function(req, res) {
if(req.files && req.files.file){
var file = req.files.file;
fs.writeFile("./public/shared/" + file.name, file.data, "binary", function(err) {
if(err) {
res.send(err);
return;
}
res.send("File uploaded successfully.");
});
}
else{
res.send("No file was uploaded.");
return;
}
});
私はexpress-fileuploadを使用してアップロードを処理しています。
両方のコンピュータでWindowsが実行されています。送信側のコンピュータがChromeを使用していました。ノードのバージョンは7.5.0です。
どこが間違っていますか?この問題にどうやってアプローチするのですか?
どのようなミドルウェアを使用してアップロードを処理しますか? 'multer'?初期化を共有してください。 –
@ SergeyLapin私の間違い。その情報を含める必要があります。私はexpress-fileuploadを使用しています。私は私の質問を更新しました。 – JSideris
ありがとうございます。私はこのプロジェクトをGitHub [here](https://github.com/JSideris/sinc)で公開しています。 – JSideris