C# 使用jQueryAjax调用向MVC操作发布图像

C# 使用jQueryAjax调用向MVC操作发布图像,c#,jquery,.net,ajax,asp.net-mvc,C#,Jquery,.net,Ajax,Asp.net Mvc,我有以下代码: $("#preview").click(function () { $.ajax({ type: 'POST', url: '@Url.Action("Preview")', data: { color: $("#color-picker").val(), logo: $("#fileInput")[0].files[0] }, success:

我有以下代码:

$("#preview").click(function () {
    $.ajax({
        type: 'POST',
        url: '@Url.Action("Preview")',
        data: {
            color: $("#color-picker").val(),
            logo: $("#fileInput")[0].files[0]
        },
        success: function (data) {
            alert("Success!");
        },
        dataType: "json"
    });
});
使用此元素的:

<input id="fileInput" type="file" />

尝试将图像发布到此MVC操作:

[HttpPost]
public async Task<ActionResult> Preview(string color, HttpPostedFileBase logo)
{
    return Json("Success.");
}
[HttpPost]
通过附加文件来执行公共异步任务。我正在使用最新版本的Chrome,我一直在研究一种传递图像的方法。我已经检查了很多关于堆栈溢出的问题,试图找到一个解决方案,但到目前为止,我还没有找到一个上传这个文件的好方法


有谁知道是什么样的安全问题导致文件上传不被允许这样做,以及我如何能够以类似的方式上传图像,或者我将以什么方式这样做?还有什么替代方案?到目前为止,我似乎无法使我在堆栈中遇到的任何东西正常工作。

您可以这样做 在javascript中

var fd = new FormData();
var files = $("#fileInput").get(0).files;

if(files.lenght > 0){
   fd.append("logo",files[0]);
}

$.ajax({
        type: 'POST',
        url: '@Url.Action("Preview")',
        data:fd,
        processData: false,
        contentType: false,
        dataType: "json",
        success: function (data) {
            alert("Success!");
        }
    });
在控制器上,您可以得到这样的图像

if (System.Web.HttpContext.Current.Request.Files.AllKeys.Any())
{
   var picture = System.Web.HttpContext.Current.Request.Files["logo"];
}

你可以这样做 在javascript中

var fd = new FormData();
var files = $("#fileInput").get(0).files;

if(files.lenght > 0){
   fd.append("logo",files[0]);
}

$.ajax({
        type: 'POST',
        url: '@Url.Action("Preview")',
        data:fd,
        processData: false,
        contentType: false,
        dataType: "json",
        success: function (data) {
            alert("Success!");
        }
    });
在控制器上,您可以得到这样的图像

if (System.Web.HttpContext.Current.Request.Files.AllKeys.Any())
{
   var picture = System.Web.HttpContext.Current.Request.Files["logo"];
}

你可以这样做 在javascript中

var fd = new FormData();
var files = $("#fileInput").get(0).files;

if(files.lenght > 0){
   fd.append("logo",files[0]);
}

$.ajax({
        type: 'POST',
        url: '@Url.Action("Preview")',
        data:fd,
        processData: false,
        contentType: false,
        dataType: "json",
        success: function (data) {
            alert("Success!");
        }
    });
在控制器上,您可以得到这样的图像

if (System.Web.HttpContext.Current.Request.Files.AllKeys.Any())
{
   var picture = System.Web.HttpContext.Current.Request.Files["logo"];
}

你可以这样做 在javascript中

var fd = new FormData();
var files = $("#fileInput").get(0).files;

if(files.lenght > 0){
   fd.append("logo",files[0]);
}

$.ajax({
        type: 'POST',
        url: '@Url.Action("Preview")',
        data:fd,
        processData: false,
        contentType: false,
        dataType: "json",
        success: function (data) {
            alert("Success!");
        }
    });
在控制器上,您可以得到这样的图像

if (System.Web.HttpContext.Current.Request.Files.AllKeys.Any())
{
   var picture = System.Web.HttpContext.Current.Request.Files["logo"];
}

我也这样尝试过(在我的问题中我指出了这一点),但这也给了我非法的调用错误!对不起,我看到您在AJAX调用中添加了两个不同的参数(processData/contentType为false)。我会尝试一下,因为我认为这是诀窍或至少是其中的一部分!来源:默认情况下,Jquery use application/x-www-form-urlencoded的contentType设置为false,您将通过XMLHttpRequest发送基本上您可以使用System.Web请求获取值关于processData不确定,但我记得如果您使用FormData ocject,您应该关闭我想您在发送时告诉他不要修改我的数据Yes,两者都必须设置!谢谢我也这样尝试过(在我的问题中我指出了这一点),但这也给了我非法的调用错误!对不起,我看到您在AJAX调用中添加了两个不同的参数(processData/contentType为false)。我会尝试一下,因为我认为这是诀窍或至少是其中的一部分!来源:默认情况下,Jquery use application/x-www-form-urlencoded的contentType设置为false,您将通过XMLHttpRequest发送基本上您可以使用System.Web请求获取值关于processData不确定,但我记得如果您使用FormData ocject,您应该关闭我想您在发送时告诉他不要修改我的数据Yes,两者都必须设置!谢谢我也这样尝试过(在我的问题中我指出了这一点),但这也给了我非法的调用错误!对不起,我看到您在AJAX调用中添加了两个不同的参数(processData/contentType为false)。我会尝试一下,因为我认为这是诀窍或至少是其中的一部分!来源:默认情况下,Jquery use application/x-www-form-urlencoded的contentType设置为false,您将通过XMLHttpRequest发送基本上您可以使用System.Web请求获取值关于processData不确定,但我记得如果您使用FormData ocject,您应该关闭我想您在发送时告诉他不要修改我的数据Yes,两者都必须设置!谢谢我也这样尝试过(在我的问题中我指出了这一点),但这也给了我非法的调用错误!对不起,我看到您在AJAX调用中添加了两个不同的参数(processData/contentType为false)。我会尝试一下,因为我认为这是诀窍或至少是其中的一部分!来源:默认情况下,Jquery use application/x-www-form-urlencoded的contentType设置为false,您将通过XMLHttpRequest发送基本上您可以使用System.Web请求获取值关于processData不确定,但我记得如果您使用FormData ocject,您应该关闭我想您在发送时告诉他不要修改我的数据Yes,两者都必须设置!谢谢