[英]How to transfer files bertween two nodejs servers?
我正在嘗試創建一個可以承載文件的服務器。 該服務器應該在帶有Windows的普通計算機上運行,我認為能夠將其文件傳輸到另一台計算機。
我可以傳輸基於文本的文件:.txt,.html,.js,但無法傳輸圖像:.png,.jpg
我嘗試使用fs.readFile和fs.load,但結果是相同的。
server.js
const http = require('http');
const fs = require('fs');
var port = process.argv[2];
http.createServer((request, response) => {
console.log('new connection');
request.on('data',(data)=>{
let c = JSON.parse(data);
switch(c.todo[3]){
case 'downFile':
if(c.todo[4]&&c.todo[5]){
let src = c.todo[4];
let readStream = fs.createReadStream(src);
readStream.once('error',(err)=>{
console.log(err);
response.write(JSON.stringify(err));
response.end();
});
//console.log(readStream);
readStream.once('end',()=>{
console.log('copy done');
response.end();
});
readStream.pipe(response);
}else{
response.write(JSON.stringify('Need to specify the name of the file'));
response.end();
}
break;
default:
//console.log('chexk');
response.write(JSON.stringify('Unknown command'));
response.end();
break;
}
// response.write('success');
})
}).listen(port);
console.log('App Running');
client.js
var request = require('request');
var fs = require('fs');
var port = process.argv[2];
var path = process.argv[3];
var data = {
json:{
todo: process.argv
}
}
var url = 'http://localhost:'+port;
request.post(url,data,(err,res,body)=>{
if(err)console.log(err)
else{
fs.writeFile(process.argv[5]+process.argv[4],body,(err)=>{
if(err)console.log(err);
})
}
})
要啟動服務器,我使用:
節點server.js端口
並讓我使用tranfer:
節點client.js端口downFile inputPath outputPath
對不起英語:/
關於文本文件傳輸和非文本文件傳輸之間差異的一種可能解釋是資源的Content-Type
標頭。 特別是因為您是通過http
創建較低級別的服務器,而不是通過諸如express
的較高級別的服務創建的,因此需要謹慎設置要為要傳輸的內容設置的適當Content-Type
。 您可能可以根據文件擴展名進行推斷。
有關HTTP Content-Type
標頭的更多信息,請查看MDN文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.