.NET File Upload

VS2022 .NET8

💾基础上传示例

view

@{ViewData["Title"] = "File Upload";
}<h1>@ViewData["Title"]</h1><form method="post" enctype="multipart/form-data" action="/Home/UploadFile"><div class="form-group"><input type="file" name="file" class="form-control" /></div><button type="submit" class="btn btn-primary">Upload</button>
</form>

controller

        [HttpPost]public async Task<IActionResult> UploadFile(){var file = Request.Form.Files[0];if (file != null && file.Length > 0){var uploads = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "up");if (!Directory.Exists(uploads)){Directory.CreateDirectory(uploads);}var filePath = Path.Combine(uploads, file.FileName);using (var fileStream = new FileStream(filePath, FileMode.Create)){await file.CopyToAsync(fileStream);}// SAVE TO DBreturn RedirectToAction("Index");}return View();}
 app.UseStaticFiles();

run

在这里插入图片描述

📀优化 限制文件大小

上传文件夹如 img => img rar => file
限制文件大小

    // 根据文件类型选择上传的文件夹string fileExtension = Path.GetExtension(file.FileName).ToLower();switch (fileExtension){case ".jpg":case ".png":uploadFolder = Path.Combine("wwwroot", "img");break;case ".mp4":// 检查视频大小是否超过限制if (file.Length > 20 * 1024 * 1024) // 20MB{ModelState.AddModelError("File", "Video file size should not exceed 20MB.");return View("Index", file);}uploadFolder = Path.Combine("wwwroot", "vd");break;case ".m4a":uploadFolder = Path.Combine("wwwroot", "sound");break;case ".rar":uploadFolder = Path.Combine("wwwroot", "file");break;default:ModelState.AddModelError("File", "Unsupported file format.");return View("Index", file);}

在这里插入图片描述

🪫删除

view

@model IEnumerable<string><h1>Uploaded Files</h1>@if (Model.Any())
{<table class="table"><thead><tr><th>File Name</th><th>Action</th></tr></thead><tbody>@foreach (var fileName in Model){<tr><td>@fileName</td><td><form method="post" asp-action="DeleteFile"><input type="hidden" name="fileName" value="@fileName" /><button type="submit" class="btn btn-danger">Delete</button></form></td></tr>}</tbody></table>
}
else
{<p>No files uploaded yet.</p>
}

controller

      [HttpPost]public IActionResult DeleteFile(string fileName){var uploadFolder = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "img");var filePath = Path.Combine(uploadFolder, fileName);if (System.IO.File.Exists(filePath)){System.IO.File.Delete(filePath);}return RedirectToAction("Files");}

在这里插入图片描述

💿️重命名

        string fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}{new Random().Next(1000, 9999)}{fileExtension}";var filePath = Path.Combine(uploads, fileName);using (var fileStream = new FileStream(filePath, FileMode.Create)){await file.CopyToAsync(fileStream);}

在这里插入图片描述
在这里插入图片描述

💽多文件上传

controller

  [ApiController][Route("[controller]")]public class FileUploadController : ControllerBase{private readonly string UploadsDirectory = Path.Combine(Directory.GetCurrentDirectory(), "uploads");public FileUploadController(){// 创建上传文件夹(如果不存在)if (!Directory.Exists(UploadsDirectory)){Directory.CreateDirectory(UploadsDirectory);}}[HttpPost][Route("upload")]public async Task<IActionResult> Upload(IFormFile[] files){if (files == null || files.Length == 0){return BadRequest("No files uploaded.");}foreach (var file in files){if (file.Length == 0){return BadRequest($"File {file.FileName} is empty.");}// 根据文件类型选择上传的文件夹string uploadFolder = GetUploadFolder(file.FileName);// 重命名文件为指定格式string fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}_{Guid.NewGuid()}{Path.GetExtension(file.FileName)}";string filePath = Path.Combine(UploadsDirectory, uploadFolder, fileName);using (var stream = new FileStream(filePath, FileMode.Create)){await file.CopyToAsync(stream);}// to db}return Ok("Files uploaded successfully.");}private string GetUploadFolder(string fileName){string fileExtension = Path.GetExtension(fileName).ToLower();switch (fileExtension){case ".jpg":case ".png":return "img";case ".mp4":return "vd";case ".m4a":return "sound";case ".rar":return "file";default:throw new NotSupportedException($"Unsupported file format for {fileName}.");}}}

view


@{ViewBag.Title = "File Upload";
}<h2>File Upload2</h2><form id="uploadForm" enctype="multipart/form-data"><input type="file" id="fileInput" multiple><input type="button" value="Upload" onclick="uploadFiles()" />
</form>
<div id="message"></div>@section scripts {<script>function uploadFiles() {var files = document.getElementById('fileInput').files;if (files.length === 0) {showMessage('No files selected.');return;}var formData = new FormData();for (var i = 0; i < files.length; i++) {formData.append('files', files[i]);}$.ajax({url: '@Url.Action("Upload", "FileUpload")',type: 'POST',data: formData,processData: false,contentType: false,success: function (response) {showMessage(response);},error: function (xhr, status, error) {showMessage('Upload failed: ' + error);}});}function showMessage(message) {$('#message').text(message);}</script>
}

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

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

相关文章

Android 系统日志(Log) JNI实现流程源码分析

1、JNI概述 Java Native Interface (JNI) 是一种编程框架&#xff0c;使得Java代码能够与用其他编程语言&#xff08;如C和C&#xff09;编写的本地代码进行交互。JNI允许Java代码调用本地代码的函数&#xff0c;也允许本地代码调用Java代码的函数。下面是对JNI机制的详细概述…

【单片机】STM32F070F6P6 开发指南(一)STM32建立HAL工程

文章目录 一、基础入门二、工程初步建立三、HSE 和 LSE 时钟源设置四、时钟系统&#xff08;时钟树&#xff09;配置五、GPIO 功能引脚配置六、配置 Debug 选项七、生成工程源码八、生成工程源码九、用户程序下载 一、基础入门 f0 pack下载&#xff1a; https://www.keil.arm…

大模型应用:基于Golang实现GPT模型API调用

1.背景 当前OpenAI提供了开放接口&#xff0c;支持通过api的方式调用LLM进行文本推理、图片生成等能力&#xff0c;但目前官方只提供了Python SDK。为了后续更方便集成和应用&#xff0c;可以采用Golang对核心推理调用接口进行封装&#xff0c;提供模型调用能力。 2.相关准备…

Spark运行模式详解

Spark概述 Spark 可以在多种不同的运行模式下执行&#xff0c;每种模式都有其自身的特点和适用场景。 部署Spark集群大体上分为两种模式&#xff1a;单机模式与集群模式。大多数分布式框架都支持单机模式&#xff0c;方便开发者调试框架的运行环境。但是在生产环境中&#xff…

软件web化的趋势

引言 在信息技术飞速发展的今天&#xff0c;软件Web化已成为一个不可忽视的趋势。所谓软件Web化&#xff0c;即将传统的桌面应用软件转变为基于Web的应用程序&#xff0c;使用户能够通过浏览器进行访问和使用。传统软件通常需要在用户的计算机上进行安装和运行&#xff0c;而W…

Cadence OrCAD学习笔记(3)capture使用技巧_1

本期介绍capture的一些使用技巧。资料来源于小破站up主硬小二 1、导出像Visio规格的图纸 2、全局修改元件属性 然后保存、关闭即可。 3、导出BOM 4、导出网表 5、元件自动编号 6、capture软件和allegro关联 7、新建原理图symbol 以上为添加封装库的路径 如果要创建多部分的sy…

神器EasyRecovery2024中文电脑版下载!让数据恢复不再难

在数字化时代&#xff0c;数据就是我们的财富。无论是重要的工作报告&#xff0c;还是那些珍贵的生活瞬间照片&#xff0c;或是我们与朋友间的聊天记录&#xff0c;都储存在我们的电脑或手机中。然而&#xff0c;有时候&#xff0c;意外总是突如其来&#xff0c;电脑突然崩溃&a…

C++Qt操作Lotus Domino数据库 Lotus Domino C++连接Lotus Domino C++快速开发Lotus Domino

java连接domino C#连接domino python连接domino go连接domino,delphi连接domino Excel连接domino Flutter、微信小程序连接domino C 操作 Lotus Domino 数据库&#xff1a;自动化与效率的结合 引言 在企业级应用中&#xff0c;Lotus Domino 提供了一个强大的协作平台&#xff0…

【Linux】TCP协议【下一】{三次握手/四次挥手的深度解读==状态变化}

文章目录 本篇知识需要有TCP协议【中】的知识&#xff01;详情点击&#x1f447;1.测试一&#xff1a;服务器start函数不定义任何行为&#xff08;不调用accept&#xff09;的三次握手状态变化int listen(int sockfd, int backlog);的backlog参数全连接队列当全连接队列已满&am…

BGP策略实验(路径属性和选路规则)

要求&#xff1a; 1、使用preval策略&#xff0c;确保R4通过R2到达192.168.10.0/24 2、使用AS Path策略&#xff0c;确保R4通过R3到达192.168.11.0/24 3、配置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24 4、使用Local Preference策略&#xff0c;确保R1通过R2到达19…

Python轻松玩转excel操作指导

目录 一、一图概览 二、表格操作 三、内容操作 四、单元格操作 五、Pandas实现表格操作 六、常见场景示例 一、一图概览 ​ ​本文主要对openpyxl库的常用表格操作进行了梳理&#xff0c;熟练的运用后可极大地提升工作效率。 二、表格操作 #创建一个表格sheet.xlsx #…

C++编程揭秘:虚表机制与ABI兼容性的实例剖析

前言&#xff1a; 假设你的应用程序引用的一个库某天更新了&#xff0c;虽然 API 和调用方式基本没变&#xff0c;但你需要重新编译你的应用程序才能使用这个库&#xff0c;那么一般说这个库是源码兼容&#xff08;Source compatible&#xff09;&#xff1b;反之&#xff0c;如…

C语言指针相关知识(第五篇章)(非常详细版)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、sizeof和strlen对比二、数组之间的比较&#xff08;依据strlen和sizeof来呈现&#xff09;&#xff08;一&#xff09;、一维整型数组&#xff08;二&#…

Value-Based Reinforcement Learning(2)

Temporal Difference &#xff08;TD&#xff09; Learning 上节已经提到了如果我们有DQN&#xff0c;那么agent就知道每一步动作如何做了&#xff0c;那么DQN如何训练那&#xff1f;这里面使用TD算法。 简略分析&#xff1a; 是的估计 是的估计 所以&#xff1a; Deep Re…

对vue3/core源码ref.ts文件API的认识过程

对toRef()API的认识的过程: 最开始认识toRef()是从vue3源码中的ref.ts看见的,右侧GPT已经举了例子 然后根据例子,在控制台输出ref对象是什么样子的: 这就是ref对象了,我们根据对象中有没有__v_isRef来判断是不是一个ref对象,当对象存在且__v_isRef true的时候他就判定为是一个…

Linux-组管理和权限管理

1 Liunx组的基本介绍&#xff1a; 在Linux中的每个用户必须属于一个组&#xff0c;不能独立于组外。在Linux中每个文件都有所有者、所在组、其他组的概念 所有者所在组其它组改变用户所在的组 2 文件/目录的所有者 一般文件的创建者&#xff0c;谁创建了该文件&#xff0c;就…

从程序被SQL注入来MyBatis 再谈 #{} 与 ${} 的区别

缘由 最近在的一个项目上面&#xff0c;发现有人在给我搞 SQL 注入&#xff0c;我真的想说我那么点资源测试用的阿里云服务器&#xff0c;个人估计哈&#xff0c;估计能抗住他的请求。狗头.png 系统上面的截图 数据库截图 说句实在的&#xff0c;看到这个之后我立马就是在…

游戏找不到d3dcompiler_43.dll怎么办,教你5种可靠的修复方法

在电脑使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到d3dcompiler43.dll”。这个问题通常出现在游戏或者图形处理软件中&#xff0c;它会导致程序无法正常运行。为了解决这个问题&#xff0c;我经过多次尝试和总结&#xff0c;找到了以下五…

idea2023的git从dev分支合并到主分支master

1.本地项目切换到主分支master 右键项目-git-Branches 依次点击项目-Remote-Origin-master-CheckOut 现在你的idea中的这个项目就是远程master分支的代码了。 2.合并dev分支到master 右击项目-git-Merge 选择origin-dev 点击Merge按钮&#xff0c;此时只是合并到本地的maste…

每日一题---有效的括号问题

文章目录 前言1.题目以及分析2.参考代码 前言 前面我们学习了栈的相关操作&#xff0c;现在我们做一道题&#xff0c;进行巩固 Leetcode—有效的括号 1.题目以及分析 这道题就可以使用栈进行操作&#xff0c;因为把最左边的括号当成栈底&#xff0c;最右边的是栈顶&#xff0c…