Javascript 节点https模块将文件发送到php服务器

Javascript 节点https模块将文件发送到php服务器,javascript,php,node.js,http,https,Javascript,Php,Node.js,Http,Https,如何使用节点https模块将包含jpg文件的HTTP post请求发送到php服务器? 我尝试使用请求模块,但它不可靠(大部分时间超时),而且已经被弃用 这是我的节点上传功能 函数上传屏幕(){ var data=querystring.stringify({file:fs.createReadStream(path.join(os.tmpdir(),'screen.jpg'))}); var header={'Content-Type':'image/jpg','Content-Length'

如何使用节点https模块将包含jpg文件的HTTP post请求发送到php服务器? 我尝试使用请求模块,但它不可靠(大部分时间超时),而且已经被弃用

这是我的节点上传功能

函数上传屏幕(){
var data=querystring.stringify({file:fs.createReadStream(path.join(os.tmpdir(),'screen.jpg'))});
var header={'Content-Type':'image/jpg','Content-Length':data.Length,'User-Agent':'Mozilla/5.0'+os.Type()+'Client','X-request-With':global.id};
var server={hostname:'server.net',端口:443,路径:'/upload.php',方法:'POST',头:header};
var req=https.request(服务器,(res)=>{
console.log('statusCode:',res.statusCode);
log('headers:',res.headers);
res.on('data',(d)=>{process.stdout.write(d);});
});
请求on('error',(e)=>{console.error(e);});
请求写入(数据);
请求结束();
}
我通过我的php服务器接收它,如下所示


我的php服务器将HTTP 200返回到我的节点客户端,但没有上载任何文件。所有标题均已正确发送,但正文未正确发送。根据my access.log,服务器只接收5字节的数据。
奇怪的是,虽然不可靠,但它仍在使用旧的不推荐使用的请求模块。

您可以使用
axios
HTTP客户端

https://www.npmjs.com/package/axios
您可以这样修改代码:

const axios = require('axios');

...

async function uploadScreen() {
  try {
    let image = fs.readFileSync(path.join(os.tmpdir(), 'screen.jpg'));
    let sending_image_result = await axios({
       method: 'post',
       url: 'https://server.net:443/upload.php',
       data: {
         file: image 
       },
       headers: {
         'Content-Type': 'image/jpg',
       },
    });
    //Image is send
    console.log('Result: ', sending_image_result);
  } catch (error) {
    console.log('Error: ', error);
  }
}

您好,谢谢您的帮助,但我仍然无法保存它。PHP消息:PHP警告:未定义的数组键“file”您可以在PHP中控制台传入的请求主体,以检查数据如何到达服务器。数据应位于request.body“file”属性中。还可以在NodeJS中尝试
console.log('Image:',Image)
,检查数据是否正确发送。不过,我修复了我的php代码。客户端将其作为二进制blob而不是表单数据发送。所以我修改服务器只是为了转储http主体。谢谢你的帮助我很高兴它对你有用。如果它对你有帮助的话,请考虑批准我的答案。