我使用node.js v0.8建立客戶端/服務器套接字連接。客戶端將jpg編碼爲base64字符串並將其發送到服務器。服務器正在接收這些塊並將其寫入寫入流中。寫入數據後,新圖像文件與原始圖像文件具有相同的大小,但是當我嘗試打開它時會顯示損壞的消息。我是否用base64編碼或流寫入做錯了?將base64塊寫入writestream
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');
你能解釋爲什麼你想把它編碼爲'base64'嗎?從你顯示的代碼中,沒有理由。 – loganfsmyth
@loganfsmyth:我使用base64,因爲我想流二進制文件。有沒有另一種方法來做到這一點? – Flexer
設置base64意味着文件在發送之前從二進制轉換爲字符串。只是省略了所有的編碼,它將默認作爲二進制發送。 – loganfsmyth