在 .Net 8.0 中使用 AJAX 在 ASP.NET Core MVC 中上传文件

        上传文件是现代 Web 应用程序中的常见要求。在 ASP.NET Core MVC 中,高效处理文件上传可以提高应用程序的可用性和性能。在本文中,我们将探讨如何使用 AJAX 在 ASP.NET Core MVC 应用程序中实现文件上传,通过允许文件上传而无需刷新整个页面,从而提供更流畅的用户体验。

先决条件
要学习本教程,您应该具备以下条件:

您的机器上安装了 .NET 8 SDK。
对 ASP.NET Core MVC 和 C# 有基本的了解。
熟悉 AJAX 和 JavaScript。

设置项目
首先创建一个新的 ASP.NET Core MVC 项目。您可以使用 .NET CLI 执行此操作:

dotnet new mvc -n AjaxFileUpload
cd AjaxFileUpload

此命令创建一个名为的新项目AjaxFileUpload并设置基本的MVC结构。

添加文件上传功能

第一步:更新模型
        创建一个模型来表示用户的文件输入。虽然对于简单的文件上传,您可能不需要复杂的模型,但使用模型传递数据是一种很好的做法:

public class FileUploadModel
{
    public IFormFile File { get; set; }
}

第二步:创建视图
Views/Home在名为下添加一个新的视图Index.cshtml。此视图将包含用于上传文件的表单:

@{
    ViewData["Title"] = "Home Page";
}

<form id="fileUploadForm" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="button" value="Upload" οnclick="uploadFile()" />
</form>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
function uploadFile() {
    var formData = new FormData($('#fileUploadForm')[0]);
    $.ajax({
        url: '/Home/UploadFile',
        type: 'POST',
        data: formData,
        processData: false,
        contentType: false,
        success: function (response) {
            alert('File uploaded successfully!');
        },
        error: function () {
            alert('Error uploading file.');
        }
    });
}
</script>

该表单使用 AJAX 提交文件,其中uploadFile函数处理提交过程而无需重新加载页面。

界面预览
        使用 AJAX 在 ASP.NET Core MVC 应用程序中实现文件上传功能后,您将看到如下图所示的界面。此界面包含一个“选择文件”按钮,允许用户选择他们想要上传的文件。选择文件后,文件名将显示在按钮旁边。要将选定的文件上传到服务器,用户可以单击“上传”按钮。此过程由 AJAX 在后台处理,确保流畅无缝的用户体验,无需刷新页面。

第三步:添加控制器动作

在您的中HomeController添加一个操作来处​​理文件上传:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Threading.Tasks;

public class HomeController : Controller
{
    [HttpPost]
    public async Task<IActionResult> UploadFile(IFormFile file)
    {
        if (file != null && file.Length > 0)
        {
            var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/uploads", file.FileName);
            
            using (var stream = new FileStream(path, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }

            return Json(new { success = true, message = "File uploaded successfully" });
        }

        return Json(new { success = false, message = "No file uploaded" });
    }
}

此操作接收上传的文件并将其保存到wwwroot/uploads目录中。

理解文件上传控制器方法
        屏幕截图展示了UploadFile控制器中操作方法的一部分,用于处理 ASP.NET Core MVC 应用程序中的文件上传。此方法接受一个类型的参数IFormFile,这是 ASP.NET Core 提供的一个处理上传文件的特殊接口。

控制器方法的要点:
        参数检查:该方法首先检查上传的文件(file)是否不为空,以及文件大小是否大于0,以确保文件确实已经上传,且不为空。

        文件存储:如果存在有效文件,该方法将使用 计算存储文件的路径Path.Combine。这会将当前目录的路径与子目录和文件名结合起来,确保文件保存在指定位置 (wwwroot/uploads)。

        文件保存:使用 FileStream 保存文件。该using语句确保在文件保存后正确处理 FileStream,这对于释放系统资源和避免文件锁定问题至关重要。

响应:成功保存文件后,该方法返回 JSON 响应,表示成功。如​​果没有上传文件,则返回不同的 JSON 响应,表示失败。

关于IFormFile:
        用法:IFormFile 是一个表示随 发送的文件的接口HttpRequest。它提供用于访问已上传文件的元数据和内容的属性和方法。

        属性:关键属性包括FileName、ContentType(文件的 MIME 类型)和Length(文件的大小(以字节为单位))。

        方法:它包括诸如等方法CopyToAsync,将上传文件的内容复制到目标流,从而实现异步文件处理。

        这种方法可确保高效安全地处理文件上传,并向用户提供有关上传状态的清晰反馈。通过集成 AJAX,文件上传过程不需要重新加载页面,从而增强了整体用户体验。

文件成功存储至服务器
        上面的屏幕截图显示了uploads位于wwwrootASP.NET Core MVC 应用程序文件夹内的目录。此目录存储通过应用程序上传的文件。如图所示,文件2.jpg已成功上传并存储在服务器的文件系统中。

设置uploads目录:
        为了确保您的应用程序可以存储上传的文件,您需要uploads在wwwrootASP.NET Core 项目的目录中创建一个文件夹。此设置至关重要,因为控制器中的代码会根据此目录构造文件路径。设置方法如下:

        创建目录:导航到wwwroot项目的文件夹。右键单击并选择New> Folder,然后将其命名为uploads。

        权限:确保您的应用程序具有写入此文件夹所需的权限。这通常由您的服务器配置处理,但可能需要根据您的托管环境进行手动调整。

        此目录结构和设置确保通过应用程序上传的所有文件都组织并安全地存储在项目的文件系统中,可供应用程序进行任何进一步处理或检索。

结论
        在本教程中,您学习了如何使用 AJAX 在 ASP.NET Core MVC 应用程序中处理文件上传。此方法不仅通过避免不必要的页面重新加载来提高性能,而且还通过使应用程序感觉更具动态性和响应性来增强用户体验。

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单的spring boot tomcat版本升级

简单的spring boot tomcat版本升级 1. 需求 我们使用的springboot版本为2.3.8.RELEASE&#xff0c;对应的tomcat版本为9.0.41&#xff0c;公司tomcat对应版本发现攻击者可发送不完整的POST请求触发错误响应&#xff0c;从而可能导致获取其他用户先前请求的数据&#xff0c;造…

linux系统(ubuntu,uos等)连接鸿蒙next(mate60)设备

以前在linux上是用adb连接&#xff0c;现在升级 到了鸿蒙next&#xff0c;adb就不好用了。得用Hdc来了&#xff0c;在windows上安装了hisuit用的好好的&#xff0c;但是到了linux(ubuntu2204)下载安装了 下载中心 | 华为开发者联盟-HarmonyOS开发者官网&#xff0c;共建鸿蒙生…

C++:位与运算符

& 一&#xff0c;位与运算符的运算规则 有0则0。 二&#xff0c;判断奇偶性 %&#xff1a;优先级高&#xff0c;效率低 &&#xff1a;优先级低&#xff0c;效率高 数与1的位与运算结果为1则为奇数&#xff0c;结果为0则为偶数 三&#xff0c;获取一个数二进制的后…

(已开源-AAAI25) RCTrans:雷达相机融合3D目标检测模型

在雷达相机融合三维目标检测中&#xff0c;雷达点云稀疏、噪声较大&#xff0c;在相机雷达融合过程中提出了很多挑战。为了解决这个问题&#xff0c;我们引入了一种新的基于query的检测方法 Radar-Camera Transformer (RCTrans)。具体来说&#xff1a; 首先设计了一个雷达稠密…

如何利用PHP爬虫按关键字搜索淘宝商品

在当今的电商时代&#xff0c;获取淘宝商品信息对于市场研究、价格监控和竞争分析等方面具有重要意义。手动搜索和整理大量商品信息不仅耗时耗力&#xff0c;而且容易出错。幸运的是&#xff0c;PHP爬虫技术为我们提供了一种高效、自动化的方式来按关键字搜索淘宝商品。本文将详…

【数据可视化-11】全国大学数据可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

ceph集群配置

4台机器 高度可扩展&#xff0c;分布式的存储文件系统&#xff0c;旨在提供高性能&#xff0c;高可靠性和高可用的对象存储&#xff0c;块存储&#xff0c;文件系统的存储。 使用分布式的算法保证数据的高可用和一致性。 ceph的架构&#xff1a; 1、ceph minitor MON&…

winform中使用panuon开源UI库的问题

在 WinForms 中使用 Panuon UI 是一种提高应用程序用户界面美观和交互性的方式。Panuon UI 是一个用于 .NET 应用程序的现代化 UI 库&#xff0c;它提供了一些非常好看的控件&#xff0c;能够让 WinForms 应用程序看起来更现代。 But------------------------------------&…

【Uniapp-Vue3】swiper滑块视图容器的用法

我们使用swiper标签就可以实现轮播图的效果。 一、swiper组件的结构 整体的轮播图使用swiper标签&#xff0c;轮播的每一页使用swiper-item标签。 <template><swiper class"swiper"><swiper-item><view class"swiper-item">111…

Which CAM is Better for Extracting Geographic Objects? A Perspective From参考文献

参考文献列表 [1] E. Shelhamer, J. Long, and T. Darrell, “Fully convolutional networks for semantic segmentation,” in Proc. Comput. Vis. Pattern Recognit., Jun. 2015, pp. 3431–3440. 中文翻译&#xff1a;[1] 谢尔哈默, E., 龙, J., & 达雷尔, T. (2015).…

【C++项目实战】类和对象入门实践:日期类实现万字详解

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C项目实战》 期待您的关注 ​ 目录 引言 介绍 一、类的设计 二、成员函数的实现 &#x1f343;构造函数、析构函数、拷贝构造…

基于32单片机的智能语音家居

一、主要功能介绍 以STM32F103C8T6单片机为控制核心&#xff0c;设计一款智能远程家电控制系统&#xff0c;该系统能实现如下功能&#xff1a; 1、可通过语音命令控制照明灯、空调、加热器、窗户及窗帘的开关&#xff1b; 2、可通过手机显示和控制照明灯、空调、窗户及窗帘的开…

hot100_54. 螺旋矩阵

hot100_54. 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&am…

HTML5实现好看的博客网站、通用大作业网页模板源码

HTML5实现好看的博客网站、通用大作业网页模板源码 前言一、设计来源1.1 主界面1.2 列表界面1.3 文章界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的博客网站、通用大作业网页模板源码&#xff0c;博客网站源码&#xff0c;HTML模板源码&#xff0…

移动硬盘无法访问:全面解析、恢复方案与预防策略

描述移动硬盘无法访问现象 在日常的数据存储和传输过程中&#xff0c;移动硬盘无疑扮演着举足轻重的角色。然而&#xff0c;当移动硬盘突然无法访问时&#xff0c;这无疑给用户带来了巨大的困扰。想象一下&#xff0c;你急需从移动硬盘中调取一份重要文件&#xff0c;但系统却…

1-markdown转网页样式页面 --[制作网页模板] 【测试代码下载】

markdown转网页 将Markdown转换为带有样式的网页页面通常涉及以下几个步骤&#xff1a;首先&#xff0c;需要使用Markdown解析器将Markdown文本转换为HTML&#xff1b;其次&#xff0c;应用CSS样式来美化HTML内容。此外&#xff0c;还可以加入JavaScript以增加交互性。下面我将…

基于Centos 7系统的安全加固方案

创作不易&#xff0c;麻烦点个免费的赞和关注吧&#xff01; 声明&#xff01; 免责声明&#xff1a;本教程作者及相关参与人员对于任何直接或间接使用本教程内容而导致的任何形式的损失或损害&#xff0c;包括但不限于数据丢失、系统损坏、个人隐私泄露或经济损失等&#xf…

Angular由一个bug说起之十三:Cross Origin

跨域 想要了解跨域&#xff0c;首要要了解源 什么是源&#xff0c;源等于协议加域名加端口号 只有这三个都相同&#xff0c;才是同源&#xff0c;反之则是非同源。 比如下面这四个里&#xff0c;只有第4个是同源 而浏览器给服务器发送请求时&#xff0c;他们的源一样&#xff0…

nacos安装集群

本示例是安装在本地虚拟机linux环境。 &#xff08;1&#xff09;下载nacos https://download.csdn.net/download/lft18/90231054 &#xff08;2&#xff09;上传服务器并修改配置 放到/app/nacos目录下&#xff1a; 解压&#xff1a; tar -zxvf nacos-server-1.4.1.tar.…

taro转H5端踩坑

项目场景&#xff1a; 在利用taro进行多端开发时踩坑随记&#xff1a; 问题描述 在编译h5端的时候提示&#xff1a; Uncaught TypeError: (prevProps.className || prevProps.class || “”).split is not a function" return <ScrollView scrollY onScrollToLower{…