首先,由于英语不是我的母语,请原谅我的错误。
我正在尝试通过Symfony2开发我的第一个项目。但是我卡住了文件上传。因此,我安装了VichUploaderBundle,它提供了我需要管理的东西:所有类型的上载媒体(主要是图像)。
为什么需要上传图片?
我的项目有用户,他们可以编辑其个人资料。因此,感谢VichUploaderBundle,我有一个实体ProfilePicture应该管理上传。当使用“提交”按钮或使用ajax发送表单时,它可以完美工作。
但是,为了改善用户体验,我还添加了一个jQuery插件(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
预先感谢您的帮助!
最佳答案
该问题已解决,因为它不适合捆绑销售商品范围。 VichUploaderBundle基本上就是通过表单将UploadedFile
对象映射到实体。
您的问题的关键字是“ UploadedFile"
和“表单”。
如果必须以base64编码的字符串,原始字节等形式发送文件,则必须将其转换为UploadedFile
才能与VichUploaderBundle一起使用。我想DataTransformer可以解决问题。它可以解码base64编码的字符串并将其存储在临时文件中,该文件可以用于build an UploadedFile object。
关于jquery - VichUploaderBundle和Cropit-将base64传递到文件实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31496318/