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,两者都必须设置!谢谢