【发布时间】:2020-10-14 20:11:53
【问题描述】:
NodeJS 开发者, 我有一种情况,我必须将本地图像从 NodeJS 上传到 PHP Server。 没有报错,请求成功200 OK,但是图片没有出现在PHP服务器中。
注意:我是nodeJS开发人员,对PHP没有太多经验。
以下是想做的事:
在NodeJs中,有一个文件列表,现在我想把这些文件一个一个追加到formData中,之后我要把这个表单数据发布到PHP服务器,这样图片才能上传到PHP服务器,
在 PHP 服务器中,在第一行,它从 post 请求中接收文件,然后循环将具有支持扩展名的文件逐个移动到上传目录,并在循环完成后发送回一个带有数组的响应包含文件的下载地址
一切正常,我已经安慰了一切,一切都有完美的值,甚至 HTTPS POST 请求也成功,但 PHP 服务器没有图像,PHP 服务器没有接收请求中的文件,所以看起来像多部分数据不能在 NodeJs 中工作。
看起来 formData 在 NodeJs 中无法正常工作,因为相同的代码在浏览器中的客户端 JS 上工作。
NodeJS:-
const Axios = require('axios');
const Fs = require('fs');
const FormData = require('form-data');
var formData = new FormData();
//here allFiles is an array of object , each object contains 1 file with details like local file path ,name,size
for (var index = 0; index < allFiles.length; index++) { //Append multiple files to formData.
let currentFile = allFiles[index]
//createReadStream Retyrns fileData
let fileWithInfo = await Fs.createReadStream(currentFile.uri)
formData.append("files[]", fileWithInfo );
}
Axios.post('example.com/upload.php',formData,
{
headers: formData.getHeaders()
})
.then(d => console.log("DONE=>>>> ", d.data))
.catch((f) => console.log('FAILED=>> ', f))
});
PHP 代码:-
<?php
// Count total files
$countfiles = count($_FILES['files']['name']);
// Upload directory
$upload_location = "uploads/";
// To store uploaded files path
$files_arr = array();
// Loop all files
for($index = 0;$index < $countfiles;$index++){
// File name
$filename = $_FILES['files']['name'][$index];
// Get extension
$ext = pathinfo($filename, PATHINFO_EXTENSION);
// Valid image extension
$valid_ext = array("png","jpeg","jpg");
// Check extension
if(in_array($ext, $valid_ext)){
// File path
$path = $upload_location.$filename;
// Upload file
if(move_uploaded_file($_FILES['files']['tmp_name'][$index],$path)){
$files_arr[] = $path;
}
}
}
echo json_encode($files_arr);
die;
【问题讨论】:
-
现在作为临时解决方案我正在使用restler库,但它只能在1个请求中发送单个文件,我想要一个可以将多个文件上传到PHP服务器的解决方案。
-
您是否测试过请求正在到达服务器
标签: javascript php node.js