Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2上传javascript blob_Javascript_Php_Symfony_Blob - Fatal编程技术网

Symfony2上传javascript blob

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 =

我正在尝试使用blob将使用canvas创建的图像上载到symfony。 javascript代码正在工作,正在发送一个blob。但在控制器中,我无法通过验证。当我尝试读取验证时,它不包含任何错误

我的Foto.php有问题吗?还是在我的控制器里

要发送帖子的Javascript:

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