与表单数据一起发送上传文件

Posted

技术标签:

【中文标题】与表单数据一起发送上传文件【英文标题】:Send Uploading Files Together With Form Data 【发布时间】:2014-01-22 08:43:09 【问题描述】:
var formData = new FormData($("form#neweventform")[0]);

$.ajax(
    url: "/Event/NewEvent",
    type: "POST",
    data: formData,//JSON.stringify(saveEventModel),
    async: false,
    dataType: 'json',
    //contentType: 'application/json; charset=utf-8',
    cache: false,
    contentType: false,
    processData: false,
    fail: function (r) 
        alert('error.');
    ,
    success: function (result) 
        
...

在控制器方面我有:

public JsonResult NewEvent(EventModel saveEventModel, List<HttpPostedFileBase> files)
        
    

我在List&lt;HttpPostedFileBase&gt; files 对象中收到文件,但它为空。可能是数据没有发布到服务器?

我认为我在概念上做错了什么。 :/

如何将图片连同姓名、日期、地址等其他表单数据一起上传?..

【问题讨论】:

【参考方案1】:

这是你要找的吗?

C# MVC 控制器

public class UploadController : Controller

    [HttpPost]
    public JsonResult FilesList(List<HttpPostedFileBase> myFiles)
    
        string message;
        if (myFiles == null)
        
            message = "myFiles is null";
        
        else if (myFiles.Count != 2)
        
            message = "myFiles.Count is " + myFiles.Count;
        
        else
        
            message = string.Format("myFiles[0] is 0, myFiles[1] = 1",
                myFiles[0] == null ? "null" : myFiles[0].FileName,
                myFiles[1] == null ? "null" : myFiles[1].FileName);
        

        return Json(new
        
            Message = message
        );
    

html + javascript

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>File Upload Demo </title>
    <script src="//code.jquery.com/jquery-1.10.2.min.js"></script>
    <script type="text/javascript">
        $(function ()
        
            $('#sendButton').click(function ()
            
                var form = $('#myForm')[0];
                var formData = new FormData(form);

                $.ajax(
                    data: formData,
                    processData: false,
                    contentType: false,
                    dataType: 'json',
                    type: 'POST',
                    url: 'Upload/FilesList',
                    error: function (jqXHR, textStatus, errorThrown)
                    
                        alert('failure\n' + textStatus);
                    ,
                    success: function (data, textStatus, jqXHR)
                    
                        alert(data.Message);
                    
                );
            );
        );
    </script>
</head>
<body>
    <form id="myForm">
        File 1: <input type="file" name="myFiles" /><br />
        File 2: <input type="file" name="myFiles" />
    </form>

    <button id="sendButton">Submit over AJAX</button>
</body>
</html>

【讨论】:

以上是关于与表单数据一起发送上传文件的主要内容,如果未能解决你的问题,请参考以下文章

Jasny 与其他表单元素一起上传多个文件

关于AsyncHttpClient框架的post 提交表单上传文件怎么弄

平均堆栈文件上传

PrimeNG - 通过按钮单击发送表单数据和文件上传数据

如何使用 PHP 以动态形式上传文件并将路径/文件名与其他数据一起保存到 mysql

使用请求上传文件并发送额外数据