programing

API를 통해 Wordpress 플러그인에서 symphony 백엔드 서버로 파일을 업로드할 수 없습니까?

telebox 2023. 6. 11. 10:35
반응형

API를 통해 Wordpress 플러그인에서 symphony 백엔드 서버로 파일을 업로드할 수 없습니까?

내 프로젝트는 두 부분으로 구성됩니다.

  • 워드프레스 프론트엔드
  • 심포니 백엔드

저는 워드프레스 플러그인에서 may backend symfony project의 API를 호출하여 백엔드에 일부 데이터를 저장하려고 합니다.모든 텍스트 데이터가 저장되지만 이미지 파일을 보내려고 하면 백엔드에 저장되지 않습니다.까다로운 사업인 건 알지만 정말 해결책을 찾고 있습니다.

이미지 업로드를 위해 다음 단계를 수행하고 있습니다.

  1. 우리는 일시적으로 워드프레스 업로드 폴더에 이미지를 업로드하고 있습니다.
  2. 그러면 우리는 api를 호출할 때 우리의 요청에 따라 그 파일들을 보냅니다.
  3. symphony 백엔드 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를 통해 전송되지만 백엔드가 이미지를 픽업하지 않고 업로드하지 않습니다.

다음은 우리의 백엔드 심포니 코드입니다.

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))대신에'@'.문제는 해결됐습니다.

언급URL : https://stackoverflow.com/questions/44352796/unable-to-upload-file-from-wordpress-plugin-to-symfony-backend-server-over-the-a

반응형