gpt4 book ai didi

javascript - 如何在两个 Node js服务器之间传输文件?

转载 作者:搜寻专家 更新时间:2023-10-31 23:22:55 30 4
gpt4 key购买 nike

我正在尝试创建一个可以托管文件的服务器。该服务器应在装有 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);
})
}
})

要启动我使用的服务器:
node server.js port

为了进行传输,我使用了:
node client.js port downFile inputPath outputPath

抱歉英文:/

最佳答案

对于文本和非文本文件传输之间的差异,一个可能的解释是资源的 Content-Type header 。特别是因为您是通过 http 而不是像 express 这样的更高级别的服务来创建较低级别的服务器,所以您需要小心设置适当的 Content-为正在传输的内容键入。您可能可以根据文件扩展名进行推断。

有关 HTTP Content-Type header 的更多信息,请查看 MDN documentation

关于javascript - 如何在两个 Node js服务器之间传输文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55855298/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com