ASP.NET Core 简单文件上传

news2025/2/22 14:36:23

使用异步 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>

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2303459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

量子计算驱动的金融衍生品定价革命:突破传统蒙特卡洛模拟的性能边界

引言&#xff1a;金融计算的算力困局 某国际投行采用128量子位处理器对亚洲期权组合定价时&#xff0c;其量子振幅估计算法在2.7秒内完成传统GPU集群需要68小时的计算任务。在蒙特卡洛路径模拟实验中&#xff0c;量子随机游走算法将10,000维衍生品的价格收敛速度提升4个数量级…

华为昇腾 910B 部署 DeepSeek-R1 蒸馏系列模型详细指南

本文记录 在 华为昇腾 910B(65GB) * 8 上 部署 DeepSeekR1 蒸馏系列模型&#xff08;14B、32B&#xff09;全过程与测试结果。 NPU&#xff1a;910B3 (65GB) * 8 &#xff08;910B 有三个版本 910B1、2、3&#xff09; 模型&#xff1a;DeepSeek-R1-Distill-Qwen-14B、DeepSeek…

Selenium实战案例2:东方财富网股吧评论爬取

上一篇文章&#xff0c;我们使用Selenium完成了网页内文件的自动下载,本文我们将使用Selenium来爬取东方财富网股吧内笔记的评论数据。 网页内容分析 网页内容的分析是web自动化中的关键一步。通过分析网页结构&#xff0c;我们可以确定需要抓取的数据位置以及操作元素的方式。…

webmin配置终端显示样式,模仿UbuntuDesktop终端

webmin配置终端显示样式&#xff0c;模仿UbuntuDesktop终端 在webmin中&#xff0c;默认情况下是没有图形化桌面的&#xff0c;因此终端界面也不会像 Ubuntu Desktop 那样有预设的紫色背景和颜色主题。不过&#xff0c;你可以通过修改 ~/.bashrc 文件&#xff0c;并结合安装和…

移动通信发展史

概念解释 第一代网络通信 1G 第二代网络通信 2G 第三代网络通信 3G 第四代网络通信 4G 4g网络有很高的速率和很低的延时——高到500M的上传和1G的下载 日常中的4G只是用到了4G技术 运营商 移动-从民企到国企 联通-南方教育口有人 电信 铁通&#xff1a;成立于 2000 年…

OutOfMemoryError unable to create new native thread

现象 生产环境大量的报OutOfMemoryError: unable to create new native thread Caused by: java.lang.OutOfMemoryError: unable to create new native threadat java.lang.Thread.start0(Native Method) [na:1.8.0_291]at java.lang.Thread.start(Thread.java:717) [na:1.8.…

探索无网用Deepseek+qwen来助力Solidworks二次开发

在本教程中&#xff0c;我们将详细介绍如何在本地环境中使用 DeepSeek 和 Qwen 模型&#xff0c;结合 AnythingLLM&#xff0c;构建一个用于 SolidWorks 二次开发的私有化智能知识库。 目录 前言 环境准备 2.1 安装 Ollama 2.2 安装 Docker Desktop DeepSeek 本地部署 3.1…

MAC快速本地部署Deepseek (win也可以)

MAC快速本地部署Deepseek (win也可以) 下载安装ollama 地址: https://ollama.com/ Ollama 是一个开源的大型语言模型&#xff08;LLM&#xff09;本地运行框架&#xff0c;旨在简化大模型的部署和管理流程&#xff0c;使开发者、研究人员及爱好者能够高效地在本地环境中实验和…

deepseek清华大学第二版 如何获取 DeepSeek如何赋能职场应用 PDF文档 电子档(附下载)

deepseek清华大学第二版 DeepSeek如何赋能职场 pdf文件完整版下载 https://pan.baidu.com/s/1aQcNS8UleMldcoH0Jc6C6A?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/3ee62050a2ac

ResponseUtil.out 方法分析

文章目录 1. 问题背景2. ResponseUtil.out 方法分析a. 方法功能b. 序列化过程c. 注解 JsonInclude(JsonInclude.Include.NON_NULL) 的作用 3. Java 对象如何被序列化为 JSON4. 序列化的时机5. 谁操作序列化6. 自动序列化的条件7. 总结8. 可能的问题和注意 1. 问题背景 在 Admi…

基于Flask框架的食谱数据可视化分析系统的设计与实现

【Flask】基于Flask框架的食谱数据可视化分析系统的设计与实现 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 在当今数字化时代&#xff0c;信息可视化已成为一种高效的数据理解和传播手段。…

java后端开发day18--学生管理系统

&#xff08;以下内容全部来自上述课程&#xff09; 1.业务分析并搭建主菜单 1.需求 采取控制台的方式去书写学生管理系统 2.分析 1.初始菜单 2.学生类 属性&#xff1a;id&#xff0c;姓名&#xff0c;年龄&#xff0c;家庭住址 3.添加功能 键盘录入每一个学生信息并添…

工厂车辆排队系统

工厂车辆排队系统是一种智能化调度管理系统&#xff0c;用于管理工厂内部所有车辆的进出和排队方式。采用JAVA语言开发&#xff0c;对接了仰邦控制卡硬件。 工厂车辆排队系统是一种智能化调度管理系统&#xff0c;用于管理工厂内部所有车辆的进出和排队方式。该系统可以提高车…

深度理解多态的底层实现

前言 首先先回顾一下上次的知识 一、多态的概念 多态(polymorphism)的概念&#xff1a;通俗来说&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态)&#xff0c;这⾥我们重点讲运⾏时多态&#xff0c;编译时多态(静态多态)和运⾏时多态(动态多态…

空字符串““、空白字符串“ “和 null 三者的区别

空字符串、空白字符串和 null 三者的区别表格&#xff1a; 类型定义示例长度是否有值空字符串字符串长度为 0&#xff0c;但不是 null&#xff0c;即存在一个有效的空字符串对象。""0有值&#xff08;空值&#xff09;空白字符串字符串包含空格、制表符等空白字符&a…

在mfc中使用自定义三维向量类和计算多个三维向量的平均值

先添加一个普通类, Vector3.h, // Vector3.h: interface for the Vector3 class. // //#if !defined(AFX_VECTOR3_H__53D34D26_95FF_4377_BD54_57F4271918A4__INCLUDED_) #define AFX_VECTOR3_H__53D34D26_95FF_4377_BD54_57F4271918A4__INCLUDED_#if _MSC_VER > 1000 #p…

多线程和并发篇

多线程和并发篇 创建一个对象时底层汇编指令实现步骤&#xff08;cpu可能会进行指令重排序&#xff09;&#xff1a;一、二、三级缓存的实现&#xff1a;并发编程三要素&#xff1a;线程的五大状态&#xff1a;创建线程的三种方式&#xff1a;线程的特征和状态&#xff1a;Thre…

【3.5JavaScript】JavaScript字符串对象

文章目录 1.获取字符串长度2.大小写转换3.获取某一个字符4.截取字符串5.替换字符串6.分割字符串7.检索字符串位置8.例题&#xff1a;统计某一个字符的个数 在 JavaScript 中&#xff0c;对象是非常重要的知识点。对象分为两种&#xff1a;一种是 ”自定义对象“&#xff0c;另…

路由基本配置

学习目标 • 根据拓扑图进行网络布线。 • 清除启动配置并将路由器重新加载为默认状态。 • 在路由器上执行基本配置任务。 • 配置并激活以太网接口。 • 测试并检验配置。 • 思考网络实施方案并整理成文档。 任务 1&#xff1a;网络布线 使用适当的电缆类型连接网络设备。…

windows上vscode cmake工程搭建

安装vscode插件&#xff1a; 1.按装fastc&#xff08;主要是安装MinGW\mingw64比较方便&#xff09; 2.安装C&#xff0c;cmake&#xff0c;cmake tools插件 3.准备工作完成之后&#xff0c;按F1&#xff0c;选择cmake:Quick Start就可以创建一个cmake工程。 4.设置Cmake: G…