【发布时间】:2017-11-05 06:34:27
【问题描述】:
我的项目有两个部分
- wordpress 前端
- Symfony 后端
我正在尝试从 Wordpress 插件调用可能后端 symfony 项目的 API 以在后端存储一些数据。正在保存所有文本数据,但是当我尝试发送图像文件时,它们没有保存在后端。我知道这是一项棘手的工作,但我真的在寻找解决方案。
为了上传图片,我们正在执行以下步骤
- 我们暂时将图片上传到我们的 Wordpress 上传文件夹
- 然后我们在调用 api 的请求中发送这些文件
- 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 [] []
【问题讨论】:
-
可以显示前端
form吗? -
wordpress 前端表单?
-
是的,前端表单
-
你可以试试
foreach ($request->files as $file){吗? -
什么也没发生。文件袋仍然是空的。我删除了 ->all()
标签: php wordpress api symfony image-uploading