php - 无法通过 API 将文件从 Wordpress 插件上传到 symfony 后端服务器?

标签 php wordpress api symfony image-uploading

我的项目有两个部分

  • wordpress 前端
  • Symfony 后端

我正在尝试从 Wordpress 插件调用可能后端 symfony 项目的 API 以在后端存储一些数据。所有的文本数据都被保存了,但是当我试图发送图像文件时,它们并没有被保存在后端。我知道这是一件棘手的事情,但我真的在寻找解决方案。

对于上传图片,我们正在执行以下步骤

  1. 我们暂时将图片上传到我们的 Wordpress 上传文件夹
  2. 然后我们在调用 api 的请求中发送这些文件
  3. symfony 后端 API 正在获取请求并相应地上传图像

这是我的 Wordpress 前端代码及其请求变量:

$localUploadPath  = dirname(__DIR__).DIRECTORY_SEPARATOR.'uploads';
$randomDir  = Helper::randomDirName();
$uploadedAssets = Files::uploadPassAssets( $localUploadPath , $randomDir );
$request = new Request();
$submitedValues = $request->all();
$request->files($uploadedAssets);
$groupArray = $request->getGroups();

//remote files upload
$remoteFiles = array();
foreach($uploadedAssets as $fieldName => $imageFiles){
    $imageWithPath = $localUploadPath.'/'.$randomDir.'/'.$imageFiles; 
    $remoteFiles[$fieldName.'File'] = '@'.realpath($imageWithPath);
}
$client = new ClientApi(PASSBUILDER_ADDPASS_UPLOAD_URL);
$client->setFiles($remoteFiles);
$uploadResponse = $client->getResponse();
$this->rrmdir($localUploadPath.'/'.$randomDir);

对 api 的请求是:

{ ["appearance_logoNameFile"]=> string(149) "@/home/public_html/ads/wp-content/plugins/passbook-app/uploads/4e1020ee2b0dda294c746b5bb5acc0bd/26f27e532c874b63dca651dec4553b20ca237a44.png" ["appearance_eventTicketStripFile"]=> string(149) "@/home/public_html/ads/wp-content/plugins/passbook-app/uploads/4e1020ee2b0dda294c746b5bb5acc0bd/7354f12e6d185eee8142268b32eea6a055036d35.png" ["generalid"]=> string(32) "4ba11ffe3f2b8a46626632b48b38fcaf" ["pass_id"]=> int(198) ["email"]=> string(17) "sample@unknown.com" }

图像物理保存在 Wordpress 上传文件夹中,也通过 api 发送,但我们的后端没有获取图像也没有上传它们

这是我们的 symfony 后端代码:

public function createpassuploadAction(Request $request){

    $data = $request->request->all();
    $helper = $this->get('passbook.passhelper');
    $webDir = $helper->webDir;

    $passId = $data['pass_id'];
    $userEmail = $data['email'];
    $generalid = $data['generalid'];

    $filesResult = array();
    $filesBag = $request->files->all();
    foreach ($filesBag as $file){
        $filename = $file->getClientOriginalName();
        $filesResult []=  array(
            'path' => $file->getPathname(),
            'url'  => 'ddd'
        );
        $src    =  $webDir.'/upload/'.$passId.'/';
        $file->move( $src ,$filename );
    }
}

郑重声明,这段代码在 2 年前运行良好,但突然停止工作:

我收到这个错误

request.INFO: Matched route "curd.api.pass.create.uploads" (parameters: "_format": "json", "_controller": "Cogilent\PassbookBundle\Controller\ApiController::createpassuploadAction", "_route": "curd.api.pass.create.uploads") [] []
[2017-06-04 04:57:07] security.INFO: Populated SecurityContext with an anonymous Token [] []

最佳答案

'@'.realpath($path) 在 php 5.5 及更高版本中出现错误,使用 curl_file_create(realpath($path)) 而不是 '@'。问题解决了

关于php - 无法通过 API 将文件从 Wordpress 插件上传到 symfony 后端服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44352796/

相关文章:

php - 在 SQL 中找不到多个值

jquery - 在 Wordpress 中自动将用户上传的内容转换为灰度

jquery - 在保持相对的同时向下滚动时使侧边栏变粘

javascript - Python API,由 JavaScript 使用,发送 JSON 数据

java - 解析 openweatherMap json 文件

c# - 如何在 JetBrains Rider 的同一个项目中创建 MVC 和 Web API 项目?

php - 如何在更复杂的 OOP 概述中正确构造类和方法

PHP JWT 签名无效

php - 当用户提交具有不同数据的表单时终止第一个查询

php - 从数据库中获取产品的特定数据