使用 ajax 和 Symfony2 上传文件

Posted

技术标签:

【中文标题】使用 ajax 和 Symfony2 上传文件【英文标题】:Upload files with ajax and Symfony2 【发布时间】:2015-09-18 07:12:04 【问题描述】:

我在通过 ajax 将文件从表单上传到 Symfony2 控制器时遇到问题。

这是我的客户端表单:

var uploadFile = function() 
var content = "<form id='uploadFile' enctype='multipart/form-data' action='' method='post'>" +
        "<input id='file' type='file'/>" +
        "</form>";
$("#upload-dialog").html(content);
$("#upload-dialog").dialog(
    resizable: false,
    title: 'Dodaj załączniki do umowy',
    height: 300,
    width: 450,
    buttons: [
        
            text: 'Wyślij',
            click: function() 
                var formData = new FormData();
                formData.append('file', document.getElementById('file').files[0]);
                $.ajax(
                   url: Routing.generate('employees_upload_attachment'),
                   data: formData,
                   enctype: 'multipart/form-data',
                   processData: false,
                   contentType: false,
                   success: function() 
                   ,
                   error: function() 

                   
                );
            
        
    ]
);

;

这是我的控制器

    public function uploadAttachmentAction(Request $request) 
    $fileBag = $request->files;
    var_dump($fileBag);

当我尝试显示上传的文件时,我得到一个空的 FileBag 对象:

对象(Symfony\Component\HttpFoundation\FileBag)#12 (1) ["参数":protected]=> 数组(0)

可能出了什么问题?

编辑: 我解决了。我添加到 jquery ajax 参数中

缓存:false,类型:'POST'

一切正常:)

【问题讨论】:

你试过记录document.getElementById('file').files[0]的值吗? 是的,看起来不错。 我解决了这个问题。我添加到 ajax 参数:缓存:false 和类型:'POST'。现在一切正常:) 我正在尝试类似的方法,但是通过验证表单,以确保我的数据的完整性,可以帮助我吗? my question @math 请回答您自己的问题,或将其删除。它仍然显示在“未答复”部分。谢谢 【参考方案1】:

添加ajax参数:

cache: false,
type: 'POST'

问题已解决。

注意:答案基于评论而不是我的评论,因为它显示在“未回答”部分。

【讨论】:

以上是关于使用 ajax 和 Symfony2 上传文件的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试使用 ajax 和 symfony 上传文件

Symfony2 中多个文件上传的问题

Symfony2 限制最终用户仅上传 csv 文件

Symfony2文件上传获取原始文件名

Symfony2 Sonata Media Bundle -- 上传图片时出错

Symfony2 文件管理器 [关闭]