上传文件时将数据添加到Jquery.Ajax帖子?

时间:2014-05-01 13:53:19

标签: javascript jquery ajax asp.net-mvc drag-and-drop

我正在使用本教程为我的MVC 4 webapp构建一个拖放上传功能: http://hayageek.com/drag-and-drop-file-upload-jquery/

但是,除了文件之外,我还想发送有关它来自何处的信息(例如某些ID)和类型(域类型)。

在我下面的ajax帖子中,如何添加额外数据并将其读取到服务器端? 在教程代码中,可以看到带有“额外数据”的行,但实际上并没有实现。

function sendFileToServer(formData, status) {
    var uploadURL = '/home/upload';
    var extraData = {}; //Extra Data.
    var jqXHR = $.ajax({
        xhr: function() {
            var xhrobj = $.ajaxSettings.xhr();
            if (xhrobj.upload) {
                xhrobj.upload.addEventListener('progress', function(event) {
                    var percent = 0;
                    var position = event.loaded || event.position;
                    var total = event.total;
                    if (event.lengthComputable) {
                        percent = Math.ceil(position / total * 100);
                    }
                    //Set progress
                    status.setProgress(percent);
                }, false);
            }
            return xhrobj;
        },
        url: uploadURL,
        type: "POST",
        contentType: false,
        processData: false,
        cache: false,
        data: formData,
        success: function (data) {
            status.setProgress(100);

            //$("#status1").append("File upload Done<br>");
        }
    });

    status.setAbort(jqXHR);
}

谢谢!

2 个答案:

答案 0 :(得分:1)

要通过Ajax上传文件将其他数据传递给控制器​​,只需在Ajax调用函数(sendFileToServer)中将附加数据附加到formData即可。即你想传递一个上传目标文件夹:

formData.append('targetFolder', 'User File Upload Folder');

并在您的操作中访问您的其他参数:

[HttpPost]
public ActionResult Upload(HttpPostedFileBase file, string targetFolder)

答案 1 :(得分:0)

我通过创建一个解决方法解决了这个问题,我通过我在控制器方法上作为参数接收的URL传递了额外的数据(id等)。