ASP.NET Core 简单文件上传

使用异步 JavaScript 和 XML(AJAX)进行简单的文件上传;用 C# 编写的服务器端代码。

使用AJAX和ASP.NET Core MVC上传文件再简单不过了。这不依赖于jQuery。此代码允许上传多个文件,并与 .NET Core 3.1、.NET 6和.NET 8兼容。

如果想要实现拖放版本,请参阅本文:ASP.NET Core MVC AJAX Drap-n-Drop 文件上传

注意:以下代码示例支持 ASP.NET Core。如果使用 ASP.NET MVC 5,请转到.NET Framework 示例。如果想要从服务器下载文件,请参阅本文

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

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

@{

Layout = null;

}

<html>

<head>

<title></title>

<script type="text/javascript">

function createXMLHttp(){

if(typeof XMLHttpRequest != "undefined"){

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(aVersions[i]);

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.elements[i].name != null && form_object.elements[i].name != "") {

if (form_object.elements[i].type == "checkbox") {

if (form_object.elements[i].checked) {

fd.append(form_object.elements[i].name, form_object.elements[i].value)

}

}

else if (form_object.elements[i].type == "file") {

for (var j = 0; j < form_object.elements[i].files.length; j++) {

fd.append(form_object.elements[i].name,

form_object.elements[i].files[j],

form_object.elements[i].files[j].name)

}

}

else {

fd.append(form_object.elements[i].name, form_object.elements[i].value)

}

}

}

return fd;

}

function submitForm(oform)

{

if (window.FormData !== undefined) {

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

var formData = buildFormData(oform);

var xmlobj = createXMLHttp();

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>

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

相关推荐
武藤一雄2 天前
C#常见面试题100问 (第一弹)
windows·microsoft·面试·c#·.net·.netcore
bugcome_com2 天前
ASP.NET Web Forms 零基础入门教程
后端·asp.net
William_cl2 天前
C# ASP.NET Identity 授权实战:[Authorize (Roles=“Admin“)] 仅管理员访问(避坑 + 图解)
开发语言·c#·asp.net
bugcome_com3 天前
【ASP.NET Web Pages】页面布局核心实战:从复用性到安全性,打造一致化网站界面
前端·后端·asp.net
PascalMing3 天前
告别 Nginx!ASP.NET Core 实现多域名 Vue 静态服务与代理转发
vue.js·nginx·asp.net
猹叉叉(学习版)4 天前
【ASP.NET CORE】 14. RabbitMQ、洋葱架构
笔记·后端·架构·c#·rabbitmq·asp.net·.netcore
LFly_ice4 天前
ASP.NET Core 面试题汇总
后端·asp.net
bugcome_com4 天前
ASP.NET Web Pages 教程 —— Razor 语法全面指南
前端·asp.net
波波0074 天前
ASP.NET MVC 中的返回类型全集详解
后端·asp.net·mvc
码界奇点4 天前
基于ASP.NET Core的内容管理系统设计与实现
c++·后端·车载系统·毕业设计·asp.net·源代码管理