Мой проект состоит из двух частей
Я пытаюсь вызвать API проекта backend symfony из плагина WordPress для хранения некоторых данных в бэкэнд. все текстовые данные сохраняются, но когда я пытаюсь отправить файлы изображений, они не сохраняются в бэкэнд. Я знаю, что это сложный бизнес, но я действительно ищу решение.
для загрузки изображений мы делаем следующие шаги
вот мой код переднего конца 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))
вместо '@'
. задача решена