我已经创建了一个文件共享应用程序,可以在我的家庭网络上使用。它有点类似于Google Drive或Dropbox的web界面,但没有任何文件大小上限,也没有安全性。
当通过局域网从其他连接的计算机即时传输小文件时,它可以完美地工作,但是在2GB文件上测试时发生了奇怪的事情。
我花了大约四个小时才把进度条调到50%,然后我就把它关掉了。另外,看看节点正在使用多少内存。
它将从低开始,最高可达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。文件夹。文件
并将其直接传递到fs。writeFile将其保存到磁盘。('req.files.file'根据console.log似乎是一种缓冲区类型,显然可以直接通过管道传输到磁盘上)。
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;
}
});
我使用快速文件处理上传。
两台计算机都运行Windows。发送计算机正在使用Chrome。节点版本是7.5.0。
我哪里做错了?我该如何处理这个问题?
对于大型文件,您可能应该使用写流而不是写文件。当您使用写文件时,整个文件必须保存在内存中,因此会消耗大量内存。
这是一个不错的简短教程:http://joshondesign.com/2014/06/25/nodestreamsareawesome
node.js也有它的文档:https://nodejs.org/api/fs.html#fs_class_fs_writestream
查看express fileupload源代码。当文件到达时,它接收一个传入流并开始将其放入缓冲区
,即内存中。完成后,通过writeFile
将这个内存缓冲区写入磁盘。
express fileupload
无法避免将文件存储在内存中。考虑使用<代码> Multer >代码> DISKSture< /Cord>选项:它提供:DOCS
不使用ByteBuffer:第一种方法 使用byte Buffer:还有一点是数据成员的大小将始终保持固定,即CharacterData=1byte、ShortData=1byte、IntegerData=2byte和StringData=3byte。所以这个类的总大小总是7byte 第二种方法 PS 如果我使用序列化,它还会写入单词“characterdata”、“shortdata”、“int
我无法重写从二进制缓冲区获取的文件,我已与原始文件进行了检查,所有字节都相同。 这是从NodeJS创建的文件: 这是最初的一个: 你可以比较这两个文件,每个字节都是一样的,我猜NodeJS的编码不是正确的。 这是一段代码 你可以试着在你的节点上运行它,看看结果是错误的。 我能做些什么来修复它?
希望在节点JS中使用writefile将数据写入特定文件夹。 我在stackoverflow中看到过几个关于这个问题的问题,但没有一个对我有效。
问题内容: 我决定将设置保存在xml文件中,因为field只接受一个值。 我的XML文件就像 谁能建议我一个简单的PHP脚本来读取,编辑,添加和删除节点和节点值? 问题答案: 如果您的XML真的那么简单,可以使用CRUD。SimpleXml将XML解析为SimpleXmlElements的树结构。简而言之,您可以像这样使用它: 请参考PHP手册以获取更多用法示例和API描述。 在阿里纳斯,如果你真
本文向大家介绍操作系统中缓冲与缓存之间的区别,包括了操作系统中缓冲与缓存之间的区别的使用技巧和注意事项,需要的朋友参考一下 在这篇文章中,我们将了解操作系统中缓冲和缓存之间的区别- 正在缓冲 它是主内存中的一个区域。 这意味着它与RAM(随机存取存储器)相关联。 缓冲区将数据的原始副本存储在内存中。 缓冲与发送方和接收方之间的数据流速度匹配。 快取 缓存将数据的原始副本存储在内存中。 缓存可以提高
我陷入了一个奇怪的境地,我必须创造一个。名为abc的dat文件。dat但问题是,当我创建它时,然后在我的c:驱动器中检查扩展名为的文件。dat不是cretaed,而是创建了扩展名类型为_auto_的文件,请建议如何更正我的代码,以便。dat文件扩展名已创建。。。 下面是构造文件名的方法 我已经按照建议做了更改,但仍然不起作用。。但仍不起作用,请告知