【发布时间】:2017-06-19 07:24:19
【问题描述】:
我创建了一个文件共享应用程序以在我的家庭网络上使用。它有点类似于 Google Drive 或 Dropbox 的网络界面,但没有任何文件大小上限且没有安全性。
当从通过 LAN 连接的其他计算机立即传输小文件时,它可以完美运行,但是在对 2GB 文件进行测试时发生了一些奇怪的事情。
在我将其切断之前,进度条大约需要四个小时才能达到 50%。另外,看看 Node 使用了多少内存。
它会从低容量开始逐步增加到 13GB,然后转储并重新启动,每分钟数次。
文件是使用 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);
在服务器端有一个使用 express 的非常简单的处理程序,它接受 req.files.file 并将其直接传递到 fs.writeFile 以将其保存到磁盘。 (根据 console.log,'req.files.file' 似乎是 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 我的错。应该包括该信息。我正在使用快速文件上传。我已经更新了我的问题。
-
谢谢。我将在 GitHub here 上开源这个项目。
标签: javascript node.js express buffer