Request.Files始终为null

我正在编写一个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没有错。我在控制器中将代码更改为波纹管,现在可以正常工作了。

[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

}

以上是 Request.Files始终为null 的全部内容, 来源链接: utcz.com/qa/409389.html

回到顶部