使用node.js,我决定是时候处理文件上传了。看看我的选择,我觉得用socketio上传对我来说是最好的选择。这当然使我的模块列表无法使用multer或其他需要你加载另一个http请求的方式。我最终选择了 socket.io-stream ,一切都运行良好,直到我尝试上传更大的文件(200 KB或更大),这不是很好,因为上传的东西的平均大小是从50 KB到700 KB的任何内容,最大值为1MB。在我看来,上传过早结束,没有任何线索为什么。虽然我觉得问题是服务器端,但这里既是客户端又是服务器。
客户端:
var file = $("#map").prop('files')[0];
var stream = ss.createStream();
ss(m).emit('file', stream, {name: file.name});
服务器:
ss(socket).on('file', function(stream, data) {
var filename = path.basename(data.name);
var way = '/images/maps/uploaded/';
stream.pipe(fs.createWriteStream('public'+way+filename));
stream.on('end', function() {
socket.emit('fileDone', "<img src='" + way + filename + "' height='200px;' width='400px'/>");
});
});
您可能会告诉主要功能是上传图片。客户端工作,所以我不担心。在服务器端,我将获取该文件,然后将其保存在上传的目录中。 stream.on用于回调以在完成后显示上载的图像。
当上传大多数“大文件”(超过200KB)时,它只是部分工作如下图所示,而大于700KB的那些将在上传后显示大小为0。
答案 0 :(得分:0)
这不是问题的完美解决方案,而是更多的解决方法。使用socket.io-steam,我遇到了这个问题,但切换到socketio-file-upload修复了我的问题。仍然不知道为什么它不能以第一种方式工作。