Symfony2上传javascript blob
我正在尝试使用blob将使用canvas创建的图像上载到symfony。 javascript代码正在工作,正在发送一个blob。但在控制器中,我无法通过验证。当我尝试读取验证时,它不包含任何错误 我的Foto.php有问题吗?还是在我的控制器里 要发送帖子的Javascript:Symfony2上传javascript blob,javascript,php,symfony,blob,Javascript,Php,Symfony,Blob,我正在尝试使用blob将使用canvas创建的图像上载到symfony。 javascript代码正在工作,正在发送一个blob。但在控制器中,我无法通过验证。当我尝试读取验证时,它不包含任何错误 我的Foto.php有问题吗?还是在我的控制器里 要发送帖子的Javascript: var dataURL = canvas.toDataURL("image/png", 0.5); var blob = dataURItoBlob(dataURL); var formData =
var dataURL = canvas.toDataURL("image/png", 0.5);
var blob = dataURItoBlob(dataURL);
var formData = new FormData();
formData.append('file', blob);
var xhr = new XMLHttpRequest();
// Add any event handlers here...
xhr.open('POST', '{{ path("foto_uploadwebcam" ) }}', true);
xhr.send(formData);
function dataURItoBlob(dataURI) {
// convert base64/URLEncoded data component to raw binary data held in a string
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
byteString = atob(dataURI.split(',')[1]);
else
byteString = unescape(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to a typed array
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
}
以及控制器:
public function uploadwebcamAction(Request $request)
{
$foto = new Foto();
$form = $this->createFormBuilder($foto, array('csrf_protection' => false))
->add('file', 'file')
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($foto);
$em->flush();
return $this->redirect($this->generateUrl("foto_share", array('foto' => $foto->getId())));
}
}
您必须在请求中添加以下标题:
enctype: multipart/form-data
否则symfony无法识别“部件”,请求->文件为空
感谢您提供上述代码,稍作修改后,我发现这个想法对我自己的使用非常有用!有趣的是,这篇文章也有一年多的历史了,这是另一种帮助我们大家的方式!很抱歉,我没有答案,但我想知道您是否对文件上载到的目标具有文件夹权限?此外,我还必须在TWIG中添加一些隐藏的表单字段,包括表单标记的属性:enctype=“multipart/form data”。这是为了防止任何其他人偶然发现这个问题,仍然在寻找解决方案@AaronBelchamber我会尝试更新这个,并给出一个答案。我找到了一种方法来做我需要的事情。@yeouuu,不要用答案编辑你的问题,你可以而且应该回答你自己的问题。考虑到视图和向上投票,您甚至可能会遇到一个问题。@TonyChiboucas这些编辑只是重命名和缩进修复程序……您是否可以再次检查是否收到Symfony中的文件?我曾经遇到过这个问题:Javascript发送文件,PHP接收文件,而Symfony没有。如果是这样,请告诉我,我会看看我的旧补丁。
enctype: multipart/form-data