Javascript 将base64块写入writestream

Javascript 将base64块写入writestream,javascript,node.js,sockets,stream,base64,Javascript,Node.js,Sockets,Stream,Base64,我使用node.js v0.8建立客户机/服务器套接字连接。客户端将jpg编码为base64字符串并将其发送到服务器。服务器正在接收这些块并将其写入writestream。写入数据后,新图像文件的大小与原始图像文件相同,但在我尝试打开它时显示损坏的消息。base64编码或流写入是否出错 Client.js和Server.js代码段: //Client sending base64 encoded string from image var net = require('net'); var f

我使用node.js v0.8建立客户机/服务器套接字连接。客户端将jpg编码为base64字符串并将其发送到服务器。服务器正在接收这些块并将其写入writestream。写入数据后,新图像文件的大小与原始图像文件相同,但在我尝试打开它时显示损坏的消息。base64编码或流写入是否出错

Client.js和Server.js代码段:

//Client sending base64 encoded string from image

var net = require('net');
var fs = require('fs');

var socket = new net.Socket();

socket.connect(3000, '127.0.0.1', function() {

    var stream = fs.createReadStream(__dirname + '/node.jpg', {encoding: 'base64'});

    stream.on('data', function(chunk){
        socket.write(chunk, 'base64');
    });

});


//Server should write base64 string into new image file

var net = require('net');
var fs = require('fs');

var imageFilename = "node-copy.jpg";

var writeStream = fs.createWriteStream(__dirname + '/node-copy.jpg', {flags: 'a',  encoding: 'base64'});    

var server = net.createServer(function(socket){  

  socket.setEncoding('base64');

  socket.on("data", function(chunk){
    writeStream.write(chunk, 'base64');
  });

}).listen(3000, '127.0.0.1');

您将每个块编码为单独的实体,这是错误的


使用streaming base64模块,如。

您知道如何在不使用第三方模块的情况下对其进行编码吗?知道。编写您自己的模块来实现此功能。您能解释一下为什么要将其编码为
base64
?从您显示的代码来看,没有理由这样做。@loganfsmyth:我使用base64是因为我想流式处理二进制文件。还有其他方法吗?设置base64意味着文件在发送之前将从二进制文件转换为字符串。只需省去所有的编码,默认情况下它将作为二进制文件发送。@loganfsmyth:我知道这段代码毫无意义,但这只是一个简化的示例。其思想是将带有文件名的jpg数据从客户端传输到服务器,所有内容都作为带分隔符的base64编码字符串。因此,我可以分割数据并在服务器上创建一个带有文件名的jpg。但首先,必须将示例中的base64流正确写入该文件。您知道如何使用writestream实现这一点吗?您描述的是在流中发送文档+元数据。这就是HTTP的设计目的,因此我建议您使用HTTP连接,并将文件名作为头发送,将图像作为正文发送。