ASP.NET MVC AJAX 文件上传

如何使用 MVC 5 和 AJAX(.NET Framework)上传文件。

使用AJAX和ASP.NET MVC 上传文件 再简单不过了。对于最纯粹的人来说,这不需要使用jQuery。此代码实际上允许上传多个文件。

注意:以下代码示例支持 ASP.NET MVC 5。如果使用 .NET Core,请转到ASP.NET Core 示例

首先,在 Visual Studio 中创建一个名为"Website"的 Web 应用程序 (MVC)。

现在,客户端。一半的工作由函数完成buildFormData()。有关的完整实现buildFormData(),请参阅AJAX 库源代码

如果使用 CSHTML 文件,则使用此代码:

@{

Layout = null;

}

<html>

<head>

<title></title>

<script type="text/javascript">

function xmlHttp(){

if(XMLHttpRequest){

return new XMLHttpRequest();

} else if(window.ActiveXObject){

var aVersions = "MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp";

for(var i = 0; i < aVersions.length; i++){

try{

var oXmlHttp = new ActiveXObject(aVersionsi);

return oXmlHttp;

}catch(oError){

//void

}

}

}

throw new Error("XMLHttp object could not be created.");

}

//used for posting "multipart/form-data"

function buildFormData(form_object) {

var fd = new FormData();

for (var i = 0; i < form_object.elements.length; i++) {

if (form_object.elementsi.name != null && form_object.elementsi.name != "") {

if (form_object.elementsi.type == "checkbox") {

if (form_object.elementsi.checked) {

fd.append(form_object.elementsi.name, form_object.elementsi.value)

}

}

else if (form_object.elementsi.type == "file") {

for (var j = 0; j < form_object.elementsi.files.length; j++) {

fd.append(form_object.elementsi.name,

form_object.elementsi.filesj,

form_object.elementsi.filesj.name)

}

}

else {

fd.append(form_object.elementsi.name, form_object.elementsi.value)

}

}

}

return fd;

}

function submitForm(oform)

{

if (window.FormData !== undefined) {

document.getElementById("SubmitButton").disabled = true;

var formData = buildFormData(oform);

var xmlobj = xmlHttp();

xmlobj.onreadystatechange = function () {

if (xmlobj.readyState == 4) {

if (xmlobj.status == 200) {

document.getElementById("divResponse").innerHTML = xmlobj.responseText;

document.getElementById("SubmitButton").disabled = false;

}

else {

throw new Error("Error: " + xmlobj.status + ": " + xmlobj.statusText);

}

}

};

xmlobj.open("post", oform.action, true);

xmlobj.send(formData);

}

else {

alert("This browser does not support posting files with HTML5 and AJAX.");

}

return false;

}

</script>

</head>

<body>

<form enctype="multipart/form-data" οnsubmit="return submitForm(this);" method="post" action="/Ajax/UploadFile">

@Html.AntiForgeryToken()

<input type="text" required name="fullname" placeholder="enter your name here" /><br />

<input type="file" accept="image/jpeg" multiple required name="file1" /><br />

<input type="submit" id="SubmitButton" value="Upload File(s)" />

</form>

<div id="divResponse"></div>

</body>

</html>

如果仍在使用 ASPX 文件,则使用此代码:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<html>

<head>

<title></title>

<script type="text/javascript">

function xmlHttp(){

if(XMLHttpRequest){

return new XMLHttpRequest();

} else if(window.ActiveXObject){

var aVersions = "MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp";

for(var i = 0; i < aVersions.length; i++){

try{

var oXmlHttp = new ActiveXObject(aVersionsi);

return oXmlHttp;

}catch(oError){

//void

}

}

}

throw new Error("XMLHttp object could not be created.");

}

//used for posting "multipart/form-data"

function buildFormData(form_object) {

var fd = new FormData();

for (var i = 0; i < form_object.elements.length; i++) {

if (form_object.elementsi.name != null && form_object.elementsi.name != "") {

if (form_object.elementsi.type == "checkbox") {

if (form_object.elementsi.checked) {

fd.append(form_object.elementsi.name, form_object.elementsi.value)

}

}

else if (form_object.elementsi.type == "file") {

for (var j = 0; j < form_object.elementsi.files.length; j++) {

fd.append(form_object.elementsi.name,

form_object.elementsi.filesj,

form_object.elementsi.filesj.name)

}

}

else {

fd.append(form_object.elementsi.name, form_object.elementsi.value)

}

}

}

return fd;

}

function submitForm(oform)

{

if (window.FormData !== undefined) {

document.getElementById("SubmitButton").disabled = true;

var formData = buildFormData(oform);

var xmlobj = xmlHttp();

xmlobj.onreadystatechange = function () {

if (xmlobj.readyState == 4) {

if (xmlobj.status == 200) {

document.getElementById("divResponse").innerHTML = xmlobj.responseText;

document.getElementById("SubmitButton").disabled = false;

}

else {

throw new Error("Error: " + xmlobj.status + ": " + xmlobj.statusText);

}

}

};

xmlobj.open("post", oform.action, true);

xmlobj.send(formData);

}

else {

alert("This browser does not support posting files with HTML5 and AJAX.");

}

return false;

}

</script>

</head>

<body>

<form enctype="multipart/form-data" οnsubmit="return submitForm(this);" method="post" action="/Ajax/UploadFile">

<%: Html.AntiForgeryToken() %>

<input type="text" required name="fullname" placeholder="enter your name here" /><br />

<input type="file" accept="image/jpeg" multiple required name="file1" /><br />

<input type="submit" id="SubmitButton" value="Upload File(s)" />

</form>

<div id="divResponse"></div>

</body>

</html>

接下来是服务器端。创建一个名为"Ajax"的控制器并添加UploadFile()方法。

// AjaxController.cs

using System;

using System.Web.Mvc;

namespace Website.Controllers

{

public class AjaxController : Controller

{

HttpPost

ValidateInput(false)

ValidateAntiForgeryToken

public string UploadFile()

{

int i;

for (i = 0; i < Request.Files.Count; i++)

{

if (Request.Filesi.ContentLength > 0)

{

if (Request.Filesi.ContentType.ToLower() == "image/jpeg") // can be modified or omitted

{

try

{

// make sure that this directory has write permissions

Request.Filesi.SaveAs(Request.MapPath("/") + Request.Filesi.FileName);

}

catch (Exception ex)

{

return ex.Message.ToString();

}

}

}

}

return i.ToString() + " files copied. Hello, " + Request.Form"fullname";

}

}

}

收尾工作

最后,确保服务器将接受大型上传并给予上传足够的时间来完成(超时)。编辑Web.config文件以包含这些部分。注意:ASP.NET Core 要求您创建一个web.config文件。

<system.web>

<httpRuntime executionTimeout="600" maxRequestLength="20480" requestValidationMode="2.0"/>

</system.web>

<system.webServer>

<security>

<requestFiltering>

<requestLimits maxAllowedContentLength="102400000"/>

</requestFiltering>

</security>

</system.webServer>

再简单不过了!!!

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
terry60014 天前
5G视频短信服务商选型全攻略:通道资源、架构能力与成本评估2026最新标准
大数据·人工智能·5g·json·asp.net·信息与通信·数据库架构
zzb158014 天前
ios基础-MVC-UIView
ios·mvc·cocoa
加号315 天前
【C#】VS2022 传统 ASP.NET Web 服务(.asmx)接口实现指南
前端·c#·asp.net
换个昵称都难15 天前
webrtc RTC_P2P源码解析
asp.net·webrtc·p2p
秋雨梧桐叶落莳16 天前
iOS——QQ音乐仿写项目总结
学习·macos·ui·ios·mvc·objective-c·xcode
之歆16 天前
Ajax 基础技术深度解析:XHR 从入门到跨域
前端·ajax·okhttp
之歆16 天前
Ajax 进阶:跨域、CORS、JSONP 与请求封装实战
前端·javascript·ajax
sugar__salt16 天前
前端Ajax核心原理与实战:从异步机制到接口请求全解析
前端·javascript·ajax
YHHLAI17 天前
Ajax — 异步数据交互
ajax·okhttp·交互