我正在编写一个C#ASP.Net MVC应用程序,供客户端将文件发布到其他服务器。我正在使用通用处理程序来处理从客户端到服务器的发布文件。但是在我的处理程序中,System.Web.HttpContext.Current.Request.Files始终为空(0个计数)。
表格代码:
@model ITDB102.Models.UploadFileResultsModels @{ Layout = "~/Views/Shared/_Layout.cshtml"; } <div> <h1>Upload File</h1> <form id="file-form" action="/Files/UploadFile" method="post" data-ajax="false" enctype="multipart/form-data"> <div><input type="file" id="FilePath" name="FilePath"/> <button type="submit">Send File</button></div> </form> </div> @section scripts{ <script src="~/Scripts/jquery-1.10.2.js"></script> <script type="text/javascript"> // Variable to store your files var files; var form = document.getElementById('file-form'); // Add events $('input[type=file]').on('change', prepareUpload); // Grab the files and set them to our variable function prepareUpload(event) { files = $('#FilePath').get(0).files; } form.onsubmit = function (event) { uploadFiles(event); } // Catch the form submit and upload the files function uploadFiles(event) { event.stopPropagation(); // Stop stuff happening event.preventDefault(); // Totally stop stuff happening // Create a formdata object and add the files var data = new FormData(); if (files.lenght > 0) { data.append('UploadedFiles', files[0], file[0].name); } //setup request var xhr = new XMLHttpRequest(); //open connection xhr.open('POST', '/Files/UploadFile',false); xhr.setRequestHeader("Content-Type", files.type); //send request xhr.send(data); } </script> }
处理程序:
/// <summary> /// Uploads the file. /// </summary> /// <returns></returns> [HttpPost] public virtual ActionResult UploadFile() { HttpPostedFile myFile = System.Web.HttpContext.Current.Request.Files["UploadedFiles"]; bool isUploaded = false; string message = "File upload failed"; if (myFile != null && myFile.ContentLength != 0) { string pathForSaving = Server.MapPath("~/Uploads"); if (this.CreateFolderIfNeeded(pathForSaving)) { try { myFile.SaveAs(Path.Combine(pathForSaving, myFile.FileName)); isUploaded = true; message = "File uploaded successfully!"; } catch (Exception ex) { message = string.Format("File upload failed: {0}", ex.Message); } } } return Json(new { isUploaded = isUploaded, message = message }, "text/html"); } #region Private Methods /// <summary> /// Creates the folder if needed. /// </summary> /// <param name="path">The path.</param> /// <returns></returns> private bool CreateFolderIfNeeded(string path) { bool result = true; if (!Directory.Exists(path)) { try { Directory.CreateDirectory(path); } catch (Exception) { /*TODO: You must process this exception.*/ result = false; } } return result; } #endregion
请帮我。谢谢。
最后,我发现了问题。
由于var myFile = System.Web.HttpContext.Current.Request.Files["UploadedFiles"];某些原因,控制器中的代码永远无法正常工作。我的ajax没有错。我在控制器中将代码更改为波纹管,现在可以正常工作了。
var myFile = System.Web.HttpContext.Current.Request.Files["UploadedFiles"];
[HttpPost] public virtual ActionResult UploadFile() { //var myFile = System.Web.HttpContext.Current.Request.Files["UploadedFiles"]; // bool isUploaded = false; string message = "File upload failed"; for (int i = 0; i < Request.Files.Count; i++ ) { var myFile = Request.Files[i]; if (myFile != null && myFile.ContentLength != 0) { string pathForSaving = Server.MapPath("~/Uploads"); if (this.CreateFolderIfNeeded(pathForSaving)) { try { myFile.SaveAs(Path.Combine(pathForSaving, myFile.FileName)); isUploaded = true; message = "File uploaded successfully!"; } catch (Exception ex) { message = string.Format("File upload failed: {0}", ex.Message); } } } } return Json(new { isUploaded = isUploaded, message = message }, "text/html"); } #endregion #region Private Methods /// <summary> /// Creates the folder if needed. /// </summary> /// <param name="path">The path.</param> /// <returns></returns> private bool CreateFolderIfNeeded(string path) { bool result = true; if (!Directory.Exists(path)) { try { Directory.CreateDirectory(path); } catch (Exception) { /*TODO: You must process this exception.*/ result = false; } } return result; } #endregion }