Javascript 节点https模块将文件发送到php服务器
如何使用节点https模块将包含jpg文件的HTTP post请求发送到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'
函数上传屏幕(){
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主体。谢谢你的帮助我很高兴它对你有用。如果它对你有帮助的话,请考虑批准我的答案。