节点 https 模块发送文件到 php 服务器
node https module send file to php server
如何将包含 jpg 文件的 HTTP post 请求发送到具有节点 https 模块的 php 服务器?
我尝试使用请求模块但它不可靠(大部分时间超时)并且它已经被弃用。
这是我的节点上传功能
function uploadScreen() {
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-Requested-With': global.id};
var server = {hostname: 'server.net', port: 443, path: '/upload.php', method: 'POST', headers:header};
var req = https.request(server, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {process.stdout.write(d);});
});
req.on('error', (e) => {console.error(e);});
req.write(data);
req.end();
}
我用我的 php 服务器接收它,就像这样
<?php
$target_dir = "../";
$obj=(object)$_FILES['file'];
$userid = $_SERVER['HTTP_X_REQUESTED_WITH'];
$name=date("Ymd")."-".$userid."-".date("His").".jpg";
$tmp=$obj->tmp_name;
move_uploaded_file($tmp, $target_dir.$name);
?>
我的 php 服务器 return HTTP 200 到我的节点客户端,但没有上传文件。所有 header 均已正确发送,但 body 未正确发送。根据我的 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);
}
}
如何将包含 jpg 文件的 HTTP post 请求发送到具有节点 https 模块的 php 服务器? 我尝试使用请求模块但它不可靠(大部分时间超时)并且它已经被弃用。
这是我的节点上传功能
function uploadScreen() {
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-Requested-With': global.id};
var server = {hostname: 'server.net', port: 443, path: '/upload.php', method: 'POST', headers:header};
var req = https.request(server, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {process.stdout.write(d);});
});
req.on('error', (e) => {console.error(e);});
req.write(data);
req.end();
}
我用我的 php 服务器接收它,就像这样
<?php
$target_dir = "../";
$obj=(object)$_FILES['file'];
$userid = $_SERVER['HTTP_X_REQUESTED_WITH'];
$name=date("Ymd")."-".$userid."-".date("His").".jpg";
$tmp=$obj->tmp_name;
move_uploaded_file($tmp, $target_dir.$name);
?>
我的 php 服务器 return HTTP 200 到我的节点客户端,但没有上传文件。所有 header 均已正确发送,但 body 未正确发送。根据我的 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);
}
}