【问题标题】:How to transfer files bertween two nodejs servers?如何在两个节点 js 服务器之间传输文件?
【发布时间】:2019-09-15 05:47:08
【问题描述】:

我正在尝试创建一个可以托管文件的服务器。这台服务器应该在一台普通的带有 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 端口

并进行转移,我使用:
node client.js port downFile inputPath outputPath

对不起英语:/

【问题讨论】:

  • 您的主要问题是什么?,但无法传输图像:.png、.jpg?

标签: javascript node.js server file-transfer


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-02
    • 2016-06-07
    • 1970-01-01
    • 2014-04-12
    • 2019-02-10
    • 1970-01-01
    • 2021-06-23
    • 2018-02-11
    相关资源
    最近更新 更多