我需要在MVC中通過ajax模式上傳圖像。我使用這種方法在Js代碼中一切正常,它獲取formdata和ajax請求正確地發送到控制器,但在我的控制器,我得到Request.File [「myfile」]總是空...我到處尋找解決方案,但沒有找到請幫助我這就是這麼緊急...謝謝所有 這裏是我的js代碼: 我的Request.Files行動方在MVC中通過ajax上傳文件時始終爲空
\t \t function UploadImage() {
\t \t \t var data = new FormData();
\t \t \t var files = $("#myfile").get(0).files;
\t \t \t if (files.length > 0) {
\t \t \t \t data.append("MyImages", files[0]);
\t \t \t }
\t \t $.ajax({
\t \t \t \t url: "@Url.Action("SaveFile","Home")",
\t \t \t \t type: "POST",
\t \t \t \t processData: false,
\t \t \t \t contentType: false,
\t \t \t \t enctype: 'multipart/form-data',
\t \t \t \t data: {},
\t \t \t \t success: function (response) {
\t \t \t \t \t //code after success
\t \t \t \t \t console.log(response);
\t \t \t \t \t alert(response);
\t \t \t \t },
\t \t \t \t error: function (er) {
\t \t \t \t \t alert(er);
\t \t \t \t }
\t \t \t });
\t \t }
\t
Html:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
\t <title>upload</title>
\t <link href="~/Content/bootstrap.css" rel="stylesheet" />
\t <script src="~/Scripts/jquery-1.10.2.min.js"></script>
\t <script src="~/Scripts/bootstrap.min.js"></script>
\t <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
\t
</head>
<body>
<div class="row">
\t <div class="container">
\t \t <div>
\t \t \t file:<input type="file" id="myfile" style="display: block"/>
\t \t \t <br />
\t \t \t <input type="button" value="save" id="btnUpload" onclick="UploadImage()"/>
\t \t </div>
\t </div>
</div>
</body>
</html>
和我的行動:
[HttpPost]
public JsonResult SaveFile()
{
var uniqueName = "";
if (Request.Files["myfile"] != null)
{
var file = Request.Files["myfile"];
if (file.FileName != "")
{
var ext = System.IO.Path.GetExtension(file.FileName);
uniqueName = System.Guid.NewGuid().ToString() + ext;
var rootPath = Server.MapPath("~/Upload/");
var fileSavePath = System.IO.Path.Combine(rootPath, uniqueName);
file.SaveAs(fileSavePath);
}
}
return Json(new
{
success=false,
name=uniqueName
},JsonRequestBehavior.AllowGet);
}
你必須通過FORMDATA替換'數據:{}'和'數據:數據,' – Curiousdev
注意,你也可以簡單地給你的文件輸入一個'name'屬性(說'名字=「文件」 ')並使用'var data = new FormData($('form')。get(0));'並移除不必要的'enctype:'multipart/form-data','並且您的POST方法是'public JsonResult SaveFile(HttpPostedFileBase文件) –
用你當前的代碼,當你確實發送你的數據時,你指的是一個不存在的屬性 - 你將它命名爲''MyImages'',而不是''myfile'' –