10月CMS - 带上传文件的API

时间:2017-12-27 16:09:48

标签: php octobercms octobercms-plugins octobercms-backend

我正在使用十月创建一个与我的移动应用进行通信的API。在这个过程中,我发送一个格式为base64的图像,直到这部分没有问题,因为我将这个base64图像转换为JPG格式,问题出在第二部分,即将JPG图像保存在10月的标准进程,即保存System_Files文件。

进行此上传的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

我假设您正在以某种关系保存该文件。

  

对于ex:个人资料图片等..(所以在这种情况下,您尝试将该文件附加到用户)

以此为例。

user model内,你可以定义你的关系

public $attachOne = [
    'avatar' => 'System\Models\File'
];

现在从移动应用程序接收base64编码文件

的请求时
  

您提到您已成功转换为jpeg,但例如我刚刚为此添加了粗略的代码。

// we assume you post `base64` string in `img` 
$img = post('img');
$img = str_replace('data:image/jpeg;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$imageData = base64_decode($img);

// we got raw data of file now we can convert this row data to file in dist and add that to `File` model
$file = (new \System\Models\File)->fromData($imageData, 'your_preferred_name.jpeg');

// attach that $file to Model
$yourModel->avatar = $file;
$yourModel->save();
  

如果您没有保存该文件,您现在可以使用$file->id指向该文件并在下次找到它或保存以供日后使用。

// next time 
// $file->id
$yourFile = \System\Models\File::find($file->id);

现在您的文件会在您需要该文件时保存,您可以直接使用该文件

$imageData = $yourModel->avatar->getContents();
$imageBase64Data = base64_encode($imageData);

// $imageBase64Data <- send to mobile if needed.

如果有什么不清楚请发表评论。