首先,由于英语不是我的母语,请原谅我的错误。
我正在尝试通过 Symfony2 开发我的第一个项目。但是我被文件上传卡住了。所以我安装了 VichUploaderBundle,它提供了我需要管理的内容:所有类型的上传媒体(主要是图像)。
为什么我需要上传图片? 我的项目中有用户,他们可以编辑他们的个人资料。所以,感谢 VichUploaderBundle,我有一个实体 ProfilePicture 应该管理上传。当使用提交按钮或使用 ajax 发送表单时,它可以完美运行。
但是,为了改善用户体验,我还添加了一个 jQuery 插件(Cropit)。Cropit 给出裁剪图片的 base64。我使用ajax发送整个。
并且知道...我在挣扎。我一直在互联网上到处寻找有想法的人,我已经阅读了所有文档,试图找到另一种方法来做我想做的事情。
这是我实际的“测试”代码:
$base64 = $request->request->get('base64');
preg_match('/data:([^;]*);base64,(.*)/', $base64, $matches);
$data = base64_decode($matches[2]);
$ui = uniqid().'.png';
$file = 'images/profile_pictures/'. $ui;
file_put_contents($file, $data);
$picture = new File($file);
$profile->getPicture()->setImageFile($picture);
这允许我将裁剪的图片保存在想要的目录中。然而,这并不是我真正想要的。事实上,我只是想找到一种方法将我的 base64 内容转换为 $profile->getPicture()->setImageFile() 中的内容,如果我刚刚发送了一张图片。我含糊不清,我很抱歉。这是我第一次必须创建上传系统。
我认为可能有一种方法可以避免发送 base64。但是我们能用这种数据做什么呢?如果我只是选择我的图片并想保存整个图片,我们可以使用 jQuery 对其进行解码并转换我的表单以发送表单吗?
你如何在你的项目中管理它?还有比这个更好的捆绑包吗?我一直在寻找,没有成功。SonataMediaBundle 似乎对我的需要很大,我也找不到用它保存裁剪图片的方法。
我在 VichUploaderBundle 的 Git 上找到了想管理它的人。然而,在给出更好的答案之前,他的问题已经解决了...... https://github.com/dustin10/VichUploaderBundle/issues/223
提前感谢您的帮助!