.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 DB

                return 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>
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 数据备份实战

文章目录 前言简介一、数据备份导出SQL文件第一步&#xff1a;登录MySQL第二步&#xff1a;选中数据库第三步&#xff1a;数据导出SQL文件 二、还原SQL文件第一步&#xff1a;登录MySQL第二步&#xff1a;创建数据库第三步&#xff1a;选中数据库第三步&#xff1a;终端命令行语…

探索超构光子学与人工智能相结合的下一代研究趋势

欢迎关注GZH《光场视觉》 一个研究小组在《固体与材料科学当前观点》&#xff08;Current Opinion in Solid State and Materials Science&#xff09;杂志上发表了一篇论文&#xff0c;强调了将超构 光子学研究与人工智能相结合的下一代研究趋势。超透镜引发了光学领域的一场…

[Linux]磁盘管理

一.Linux磁盘管理的原理 磁盘分区与Linux的目录是借助"挂载机制"链接的&#xff0c;将一个分区与一个目录连接起来。访问目录&#xff0c;相当于访问某块分区 lsblk命令: lsblk命令可以查看磁盘分区&#xff0c;以及每个分区所挂载的目录 lsblk -f 可以查看更细节的…

SurfaceFinger layer创建过程

SurfaceFinger layer创建过程 引言 本篇博客重点分析app创建Surface时候&#xff0c;SurfaceFlinger是如何构建对应的Layer的主要工作有那些&#xff01; 这里参考的Android源码是Android 13 aosp&#xff01; app端创建Surface 其核心流程可以分为如下接部分: app使用w,h,fo…

智慧校园学工管理系统的部署

学工体系思政服务该怎么规划建造&#xff1f;思政作为高校育人的中心使命&#xff0c;在做到让学生健康高兴生长的一起&#xff0c;也应满意学生生长成才的各类需求。使用技术为学生供给优质的信息化服务&#xff0c;是其间的有效途径。大数据让个性化教育成为可能&#xff0c;…

数据库|基于T-SQL添加默认约束、外键约束、内连接查询

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 前边学习了基于T-SQL48_47.基于T-SQL添加数据、CRUD操作、标识列详解&#xff1a;《数据库|基于T-SQL向数据库数据表中添加、修改、删除数据》 接下来接着学习基于T-SQL添加默认约束、外键约束、内连接查询&#xff0c…

基于直接二元搜索的片上偏振分束器设计 (Nature Photonics, 9, 6, (2015))案例复现

时间—2024.6.08 腾讯会议 智能算法驱动的光子学设计与应用

Python装饰器的应用

Python 中的装饰器是一种语法糖&#xff0c;可以在运行时&#xff0c;动态的给函数或类添加功能。装饰器本质上是一个函数&#xff0c;使用 函数名就是可实现绑定给函数的第二个功能 。它的作用就是在不修改被装饰对象源代码和调用方式的前提下为被装饰对象添加额外的功能。 …

小程序大能量:盲盒平台搭建与营销策略

一、引言 在移动互联网的浪潮下&#xff0c;小程序以其轻量级、即用即走的特点&#xff0c;成为了商家与消费者沟通的新桥梁。盲盒经济作为近年来兴起的消费趋势&#xff0c;结合小程序平台&#xff0c;不仅为用户带来了全新的购物体验&#xff0c;也为商家带来了更多的商业机…

【前端常见面试题整理】

开放性的题目 自我介绍 突出学习能力 我想换工作的主要原因是 介绍项目 平时是如何学习前端开发的 主要就是两个途径&#xff0c;一个是查阅官方文档&#xff0c;然后就是在网上查找技术资料或者视频去学习。平时没事的时候也会看看github&#xff0c;同时关注一些社区和IT网…

企企通入选第一新声《2024年中国CIO数字化产品选型白皮书》供应链数字产品可信名录

近日&#xff0c;第一新声研究院根据多年产业数字化研究&#xff0c;历经近半年时间&#xff0c;并综合近200位CIO调研与推荐意见&#xff0c;发布《2024年中国CIO数字化产品选型白皮书》&#xff0c;并推出企业CIO选型指南及可信产品名录。企企通凭借其优秀的采购数字化与供应…

概率分布函数与误差函数的关系

正态函数&#xff08;高斯分布&#xff09; 对其求[b,x]区间的积分 标准误差函数 以下两个方程相等&#xff08;a,b取值任意&#xff09; 两个函数重合 可知正态函数 f(t) 在[b,x]的区间上积分等于 引用desmos计算器&#xff1a;Desmos | Lets learn together.

【研0深度学习】李宏毅2024春《生成式人工智能导论》持续更新...

文章目录 第1讲 什么是生成式人工智慧&#xff1f;第2讲 今日的生成式人工智慧厉害在哪里&#xff1f;第3-5讲 训练不了人工智慧&#xff0c;你可以训练你自己&#xff08;在不训练模型的情况下强化语言模型的方法&#xff09;第6讲 大模型修炼史——第一阶段 自我学习 累计实力…

Linux 系统中 ODBC 驱动的安装与配置指南

Linux 下的 ODBC 包 从发布包中获取&#xff0c;包名为 openGauss-*.*.0-ODBC.tar.gz。Linux 环境下&#xff0c;开发应用程序要用到 unixODBC 提供的头文件&#xff08;sql.h、sqlext.h 等&#xff09;和库 libodbc.so。这些头文件和库可从 unixODBC-2.3.0 的安装包中获得。 …

JavaWeb开发 2.Web开发 Web前端开发 ①介绍

内心一旦平静&#xff0c;外界便鸦雀无声 —— 24.5.27 一、初识Web前端 网页有哪些部分组成? 文字、图片、音频、视频、超链接 ...网页&#xff0c;背后的本质是什么? 前端代码前端的代码是如何转换成用户眼中的网页的? 通过浏览器转化(解析和渲染)成用户看…

PID控制中的积分到底是什么,为什么它可以将矩形线转换为曲线?simulink搭建PID控制,积分模块1/s

PID控制中的积分到底是什么&#xff0c;为什么它可以将矩形线转换为曲线&#xff0c; 这个问题呢其实道理很简单&#xff0c;用到的是初中的知识 我们做几个测试案例 如下面matlab搭建了积分1/s 那显示如下&#xff08;红色曲线相当于加速度、蓝色曲线相当于速度&#xff09;&a…

WHLUG活动回顾 | 4大技术分享!干货满满,热闹非凡!

内容来源&#xff1a;deepin&#xff08;深度&#xff09;社区 2024 年 5 月 25 日下午&#xff0c;由 deepin&#xff08;深度&#xff09;社区华中科技大学开放原子开源俱乐部联合举办的武汉 Linux 爱好者线下沙龙活动&#xff08;WHLUG&#xff09;在华中科技大学成功举办。…

因智而兴 向“新”而行 | 软通动力携子公司鸿湖万联亮相数字中国建设峰会·智算云生态大会

5月23日至27日&#xff0c;第七届数字中国建设峰会在福州盛大召开。作为峰会的重要组成部分&#xff0c;由中国电信、中国电科、中国电子联合主办的第三届智算云生态大会同步召开。此次大会以“国云注智 聚力向新”为主题&#xff0c;深入探讨了智算云、人工智能、数据要素、量…

技术支持服务体系建设

作者黄凯&#xff0c;曾就职于阿里云&#xff0c;从事对外电商能力输出平台Linkedmall的研发工作。 背景 曾在某公司做过某项目的技术支持负责人&#xff0c;对技术支持服务体系的建设偶有心得。打算分享一下。 我们是个ToBToC的电商项目&#xff0c;最初随着项目的上线&…

如何部署一套高可用性的医院信息管理系统?基于华为云、SpringBoot、Vue及Jenkins、Gitlab的CI/CD流程

目录 一、项目背景 二、项目架构 三、项目部署流程 1、前端部署 2、后端部署 3、监控与运维 四、项目过程 一、项目背景 随着医疗信息化程度的不断加深&#xff0c;医院信息管理系统的稳定性和可用性成为了医疗机构日常运营的关键。在这个数字化时代&am…