2017-06-04 45 views
7

Mój projekt ma dwie częściNie można przesłać pliku z wtyczki Wordpress do serwera zaplecza symfony przez interfejs API?

  • wordpress frontend
  • Symfony backend

Próbuję wywołanie API może wystawać z backend symfony plugin WordPress do przechowywania niektórych danych w backend. wszystkie dane tekstowe są zapisywane, ale gdy próbuję wysyłać pliki obrazów, nie są one zapisywane w zapleczu. Wiem, że to trudna sprawa, ale naprawdę szukam rozwiązania.

do przesyłania obrazów czynimy następujące kroki

  1. jesteśmy chwilowo Przekazywanie zdjęć na naszym folderze Wordpress przesyłania
  2. następnie wysyłamy te pliki w naszą prośbę w nazywaniu api
  3. symfony backend API otrzymanie żądania i przesłanie obrazów odpowiednio

o to mój kod zakończenia Wordpress i jego zmienna żądania:

$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); 

Żądanie 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) "[email protected]" } 

obrazy są fizycznie zapisywane w folderze Wordpress przesyłania, a także wysyłane poprzez API, ale nasza backend nie odbiera obrazy i nie są przesyłając im

tutaj jest nasz kod backend 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); 
    } 
} 

Dla przypomnienia ten kod został perfe ctly uruchomiony 2 lata temu, ale nagle zatykać pracy:

ja dostaję ten błąd

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

Czy możesz pokazać "formularz" na pierwszym planie? –

+0

Wordpress formularz końca? – numerah

+0

tak, formularz końcowy –

Odpowiedz

3

wystąpił błąd w '@'.realpath($path) od PHP 5.5 i powyżej tego służy curl_file_create(realpath($path)) zamiast '@'. problem rozwiązany