C# 在asp.net mvc中通过ajax上传带有其他参数的文件

C# 在asp.net mvc中通过ajax上传带有其他参数的文件,c#,asp.net,ajax,asp.net-mvc,json,C#,Asp.net,Ajax,Asp.net Mvc,Json,我正在使用c#在asp.net mvc中工作 我想上传一个图像,它是从文件浏览器窗口中选择的,包含在表单标签中 <form id="uploader" method="post" enctype="multipart/form-data"> <input type="file" name="file" id="fileInput"/> 在同一视图中,我还有其他不属于表单的字段。我通过ajax将这些字段转换为JSON对象来发送这些字段。除此之外,我还想添加图像…请

我正在使用c#在asp.net mvc中工作

我想上传一个图像,它是从文件浏览器窗口中选择的,包含在表单标签中

<form id="uploader" method="post" enctype="multipart/form-data">
 <input type="file" name="file" id="fileInput"/>


在同一视图中,我还有其他不属于表单的字段。我通过ajax将这些字段转换为JSON对象来发送这些字段。除此之外,我还想添加图像…请帮助我完成此操作…

如果您想通过ajax发送文件,可以使用HTML5 FileReader API

API允许您读取文件的内容(从):

FileReader.readAsArrayBuffer()文件 开始读取指定Blob的内容,完成后,result属性包含一个表示文件数据的ArrayBuffer

FileReader.readAsBinaryString()文件 开始读取指定Blob的内容,一旦完成,result属性将以字符串形式包含文件中的原始二进制数据

FileReader.readAsDataURL() 开始读取指定Blob的内容,一旦完成,result属性包含一个data:URL,表示文件的数据

FileReader.readAsText()文件 开始读取指定Blob的内容,一旦完成,result属性将文件内容作为文本字符串包含

然后,您可以将文件内容作为Base64编码字符串与所有其他数据一起发送


请注意,这只适用于IE10+和其他现代浏览器。

作为一个问题,我不太清楚,我在这里展示了我假设的示例

你可以用

添加jquery表单插件

<script src="http://malsup.github.com/jquery.form.js"></script>

查看页面

@using (Ajax.BeginForm("YourAction", "YourController", new AjaxOptions() { HttpMethod = "POST" }, new { enctype = "multipart/form-data"}))
{
    @Html.AntiForgeryToken()
    //I assume other fields are 
    <input id="FirstName" name="FirstName" type="text"/>
    <input id="LastName" name="LastName" type="text"/> 
    //Image upload
    <input type="file" name="files"> 
    <br>
    <input type="submit" value="Upload File to Server">
}
@使用(Ajax.BeginForm(“YourAction”、“YourController”、新的AjaxOptions(){HttpMethod=“POST”}、新的{enctype=“multipart/form data”}))
{
@Html.AntiForgeryToken()
//我想其他领域是
//图像上传

}
控制器

        [HttpPost]
        [ValidateAntiForgeryToken]
        public void YourAction(IEnumerable<HttpPostedFileBase> files, string FirstName, string LastName)
        {
            if (files != null)
            {
                foreach (var file in files)
                {
                    // Verify that the user selected a file
                    if (file != null && file.ContentLength > 0)
                    {
                        // extract only the fielname
                        var fileName = Path.GetFileName(file.FileName);
                        // TODO: need to define destination
                        var path = Path.Combine(Server.MapPath("~/Upload"), fileName);
                        file.SaveAs(path);
                    }
                }
            }
        }
[HttpPost]
[ValidateAntiForgeryToken]
public void YourAction(IEnumerable文件、字符串FirstName、字符串LastName)
{
如果(文件!=null)
{
foreach(文件中的var文件)
{
//验证用户是否选择了一个文件
如果(file!=null&&file.ContentLength>0)
{
//只提取fielname
var fileName=Path.GetFileName(file.fileName);
//TODO:需要定义目的地
var path=path.Combine(Server.MapPath(“~/Upload”),文件名);
file.SaveAs(路径);
}
}
}
}

显示您的json代码。。!显示您的json传递参数使用我几个月前发布的示例