Slim 3在尝试从网页执行POST请求时返回getUploadedFiles()的数组(0)



我正在尝试执行一个Post请求,以便将一些伪数据存储到我的数据库中。数据集由三个文本字段和一个文件组成。

根据Slim 3文件上传文档,我创建了我的服务,它运行得很好。

这是我的服务代码:

<?php
use PsrHttpMessageServerRequestInterface as Request;
use PsrHttpMessageResponseInterface as Response;
use SlimHttpUploadedFile;

$container = $app->getContainer();
$container['upload_directory'] = __DIR__ . '/uploads/';
$app->post('/np/register',function(Request $request, Response $response){
$np_name = $request->getParam('np_name');
$np_language = $request->getParam('np_language');
$uploadedFiles = $request->getUploadedFiles();
$upload_folder = '/uploads/';
$directory = $this->get('upload_directory');
$np_image_path = $uploadedFiles['np_image_path'];
$np_active_status = $request->getParam('np_active_status');
$register_date = date('Y/m/d H:i:s');
//Getting the server ip
$server_ip = gethostbyname(gethostname());

try
{
$np_name_check = preg_match('~^[A-Za-z ]{3,20}$~i', $np_name);
$np_language_check = preg_match('~^[A-Za-z_]{3,20}$~i', $np_language);
$np_active_status_check = preg_match('/^[0-1]{1}$/', $np_active_status);
if($np_name_check>0 && $np_language_check>0 && $np_active_status_check>0 && isset($np_name) && isset($np_language) && 
isset($np_active_status) && isset($np_image_path))
{
$get_filename = moveUploadedFile($directory, $np_image_path);
$ServerURL = 'http://'.$server_ip.'/np_console/src/routes'.$upload_folder.$get_filename;
$np_image_path = $ServerURL;
$sql = "INSERT INTO np_registration (np_name,np_language,np_image_path,np_active_status,np_register_date) VALUES (:np_name,:np_language,:np_image_path,:np_active_status,:register_date)";
try 
{
//Get DB Object
$db = new db();
//Connect to database
$db = $db->connect();
$stmt = $db->prepare($sql);
$stmt->bindParam(':np_name', $np_name);
$stmt->bindParam(':np_language', $np_language);
$stmt->bindParam(':np_image_path', $np_image_path);
$stmt->bindParam(':np_active_status', $np_active_status);
$stmt->bindParam(':register_date', $register_date);
$stmt->execute();
echo '{"notice":{"respnse":"NetPicks Added Successfully"}';
}
catch(PDOException $e)
{
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
else{
echo '{"error":{"respnse":"nInvalid Data Entry"}';
}
}
catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
});
function moveUploadedFile($directory, UploadedFile $uploadedFile)
{
$extension = pathinfo($uploadedFile->getClientFilename(), PATHINFO_EXTENSION);
$basename = bin2hex(random_bytes(8));
$filename = sprintf('%s.%0.8s', $basename, $extension);
$uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);

return $filename;
}
?>

我通过Postman的Post请求按要求工作,我可以在数据库中插入值。

邮差响应

但是当我尝试从我的网页执行POST请求时,它失败了。在使用var_dump时,我发现$uploadedFiles总是返回array(0(。

售后服务电话:

export default function NP_Registration_Service(type, np_name, np_language, np_image_path, np_active_status){
let BaseUrl = 'http://localhost/np_console/public/index.php';
let formData  = new FormData();
formData.append('np_name', np_name);
formData.append('np_language', np_language);
formData.append('np_image_path', np_image_path);
formData.append('np_active_status', np_active_status);
return new Promise((resolve,reject) => {
fetch(BaseUrl+type,{
method: 'POST',
body: formData
})
.then((response) => {
var resText = response.text();
console.log("The resText");
console.log(resText);
})
.catch((error) => {
reject(error);
});
});
}

下面是var_dump($uploadedFiles(的响应,它返回数组(0(。

控制台输出

我对此进行了调查,但没有提供任何帮助。

那么我的服务电话是不是搞错了?

根据Karol Samborski添加的建议

var fileField = document.querySelector("input[type='file']");
formData.append('np_image_path', fileField.files[0]);

到Post服务调用(获取请求(解决了问题。

最新更新