无法通过API将来自WordPress插件的文件上传到Symfony后端服务器?

7
我的项目分为两个部分
  • 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 );
    }
}

记录一下,这段代码两年前完美运行,但突然间停止工作:

我遇到了这个错误:

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 [] []

你能展示前端的“表单”吗? - Imanali Mamadiev
WordPress前端表单? - numerah
是的,前端表单 - Imanali Mamadiev
你可以尝试使用 foreach ($request->files as $file){ 这段代码吗? - Imanali Mamadiev
什么也没有发生。文件包仍然是空的。我已经删除 ->all()。 - numerah
让我们在聊天中继续这个讨论 - Imanali Mamadiev
1个回答

3

在 PHP 5.5 及以上版本中,'@'.realpath($path) 会出现错误。解决方法是使用 curl_file_create(realpath($path)) 替代 '@'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接