ASP.NET多附件上传实现代码详解 | 如何实现ASP.NET多文件上传功能及步骤 – ASP.NET文件上传教程

ASPNET多附件上传实现代码

核心实现方案:

NET多附件上传实现代码详解

// 前端HTML (使用multiple属性)
<input type="file" name="files" id="fileUpload" multiple />
// 后端ASP.NET MVC Controller
[HttpPost]
public ActionResult UploadFiles()
{
    if (Request.Files.Count > 0)
    {
        foreach (string fileKey in Request.Files)
        {
            HttpPostedFileBase file = Request.Files[fileKey];
            if (file != null && file.ContentLength > 0)
            {
                var fileName = Path.GetFileName(file.FileName);
                var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"), fileName);
                file.SaveAs(path); // 保存到服务器
            }
        }
        return Json(new { success = true });
    }
    return Json(new { success = false });
}

前端交互实现

  1. HTML5多文件选择控件

    <form action="/Home/UploadFiles" method="post" enctype="multipart/form-data">
        <input type="file" name="postedFiles" multiple accept=".pdf,.docx,.jpg" />
        <button type="submit">上传</button>
    </form>
    • multiple属性启用多选
    • accept限制文件类型(可选)
  2. AJAX异步上传优化

    $("#uploadForm").submit(function(e) {
       e.preventDefault();
       var formData = new FormData(this);
       $.ajax({
           url: '/File/Upload',
           type: 'POST',
           data: formData,
           processData: false,
           contentType: false,
           success: function(response) {
               console.log(`成功上传${response.count}个文件`);
           }
       });
    });

后端处理关键技术

  1. 文件接收与验证

    public ActionResult Upload(HttpPostedFileBase[] postedFiles)
    {
        int successCount = 0;
        foreach (var file in postedFiles)
        {
            // 验证文件类型
            var ext = Path.GetExtension(file.FileName).ToLower();
            if (!new[] { ".jpg", ".png" }.Contains(ext)) continue;
            // 验证文件大小 (最大5MB)
            if (file.ContentLength > 5  1024  1024) continue;
            // 安全重命名
            var newName = $"{Guid.NewGuid()}{ext}";
            var savePath = Path.Combine(Server.MapPath("~/Uploads"), newName);
            file.SaveAs(savePath);
            successCount++;
        }
        return Json(new { count = successCount });
    }
  2. 流式处理大文件

    using (var stream = new FileStream(savePath, FileMode.Create))
    {
        byte[] buffer = new byte[4096];
        int bytesRead;
        while ((bytesRead = file.InputStream.Read(buffer, 0, buffer.Length)) > 0)
        {
            stream.Write(buffer, 0, bytesRead);
        }
    }

企业级安全防护方案

  1. 双重文件类型验证

    NET多附件上传实现代码详解

    // 检查MIME类型和扩展名是否匹配
    if (file.ContentType != "image/jpeg" && ext != ".jpg") 
        throw new InvalidDataException("文件类型不匹配");
  2. 防病毒扫描集成

    var scanner = new VirusScanner();
    ScanResult result = scanner.ScanFile(file.InputStream);
    if (result.Status != ScanStatus.Clean)
    {
        Log($"检测到恶意文件: {file.FileName}");
        return HttpStatusCode.Forbidden;
    }
  3. 文件权限隔离

    <!-- web.config配置 -->
    <location path="Uploads">
      <system.web>
        <authorization>
          <deny users=""/> <!-- 禁止直接访问 -->
        </authorization>
      </system.web>
    </location>

性能优化实践

  1. 异步处理提升吞吐量

    [HttpPost]
    public async Task<ActionResult> UploadAsync()
    {
        var provider = new MultipartMemoryStreamProvider();
        await Request.Content.ReadAsMultipartAsync(provider);
        foreach (var file in provider.Contents)
        {
            var buffer = await file.ReadAsByteArrayAsync();
            // 异步写入存储
        }
    }
  2. 分块上传实现

    // 前端使用File API分片
    const chunkSize = 5  1024  1024; // 5MB分片
    for (let start = 0; start < file.size; start += chunkSize) {
        const chunk = file.slice(start, start + chunkSize);
        await uploadChunk(chunk, start);
    }

云存储集成方案

// Azure Blob存储示例
public async Task UploadToBlob(HttpPostedFileBase file)
{
    var container = _blobClient.GetContainerReference("uploads");
    var blob = container.GetBlockBlobReference(Guid.NewGuid().ToString());
    await blob.UploadFromStreamAsync(file.InputStream);
    // 设置内容类型
    blob.Properties.ContentType = file.ContentType;
    await blob.SetPropertiesAsync();
}

真实案例优化: 某医疗系统采用分块上传+Azure Blob方案后,CT扫描文件的上传失败率从12%降至0.3%,500MB文件的平均上传时间从3分钟缩短至47秒。

NET多附件上传实现代码详解

行业数据警示:根据Verizon数据泄露报告,未经验证的文件上传功能是Web应用TOP 5的安全漏洞来源,建议所有企业级应用实施至少三层防护策略:文件类型白名单、内容签名验证和沙箱环境扫描。

互动讨论: 在您实现文件上传功能时,是否遇到过文件并发锁定的问题?您是如何解决高并发场景下的文件冲突的?欢迎分享您的实战经验!

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/25960.html

赞 (0)
ASP.NET中文汉字加密解密代码实现教程,如何用ASP.NET加密中文?必备技巧
上一篇 2026年2月12日 07:33
Ubuntu14.04开发环境如何搭建?详细配置教程
下一篇 2026年2月12日 07:38

相关推荐

  • 跨境课堂共享屏幕带宽占用如何控制?,屏幕共享带宽优化技巧

    跨境课堂共享屏幕时,带宽控制的核心答案只有一句话:把动态画质改成固定档位、把帧率压到15帧以内、把分辨率锁死在720p以下,再配合闲时预加载和路由限速措施,就能在2Mbps上行带宽的环境下稳定完成共享屏幕授课,这个结论来自多年跨境网课实操经验的积累,也符合Zoom、腾讯会议、钉钉等主流会议软件对屏幕共享场景的默……

    2026年9月8日
    600
  • 科大讯飞服务器怎么用U盘做系统,安装步骤全攻略有哪些?

    科大讯飞服务器用U盘重装系统,核心在于通过启动快捷键引导U盘进入安装界面,并提前备好对应版本的服务器操作系统镜像和阵列卡驱动,整个过程并不复杂,但准备工作里的细节决定成败,下面直接拆解从准备到落地的每一个环节,全面准备:镜像、U盘与驱动三件套先确认服务器型号,讯飞自家的服务器主要基于x86架构,常见的有国产化……

    2026年8月29日
    300
  • win10数据库服务器失败怎么办

    Win10数据库服务器启动失败,绝大多数情况下是服务配置、端口占用或系统权限这三类问题导致的,按照本文的排查顺序操作,通常能在十几分钟内恢复服务,无需重装系统或数据库,先判断故障类型:是服务没起来,还是连不上很多人一看到“数据库服务器失败”就慌了,其实这个提示分两种场景,第一种是数据库服务进程直接崩溃,比如SQ……

    2026年8月29日
    500
  • 服务器CPU负载无限制怎么办,服务器CPU负载无限制原因及解决方案

    突破CPU负载的理论与实践边界当系统持续高负载运行,传统认知中“CPU过载必致崩溃”的经验正被现代架构不断刷新,服务器CPU负载无限制并非技术幻想,而是通过分层治理与智能调度实现的工程现实——前提是构建具备弹性伸缩、故障隔离与动态优化能力的新型基础设施,为何传统认知存在局限?——三个关键认知偏差误判“负载上限……

    2026年4月14日
    6700
  • Excel复选框字体怎么改?excel复选框字体大小设置

    Excel复选框字体无法直接通过常规格式设置修改,必须通过“设置单元格格式”中的字体选项进行全局调整,或利用VBA代码实现动态样式控制,这是解决该问题的唯一标准路径,在日常办公场景中,许多用户发现选中复选框后,想要改变其内部文字的大小、颜色或字体,却发现右键菜单里根本没有“字体”选项,这种挫败感源于对Excel……

    2026年7月4日
    17610
  • win10笔记本服务器运行失败怎么办,怎么解决

    win10笔记本服务器运行失败,多半是端口冲突、防火墙拦截或服务未正确启动,通过系统日志和事件查看器很快就能定位,多数人遇到服务器启动失败第一反应是重装系统,其实大部分问题不出三分钟就能解决,下面按实操顺序拆解,从最基础的网络配置到深层的系统权限,每一步都附上具体操作路径,笔记本做服务器运行不了?先排查这些原因……

    程序编程 2026年7月29日
    1900
  • win7电脑到正在启动服务器失败怎么办

    win7电脑到正在启动服务器失败,通常不是系统瘫痪,而是软件依赖的服务或端口被占用,按顺序排查基本都能解决,这个提示在很多场景下都会冒出来,尤其常见于用友、金蝶这类财务软件,或是某些本地网页后台,很多朋友一看到带“服务器”三个字就慌了,以为电脑报废了,其实在Win7老机器上,这个报错有相当一部分是环境问题,花几……

    2026年8月23日
    1000
  • 服务器ddos攻击防护怎么做?高防服务器如何选择

    构建高可用、高弹性的防御架构,是应对分布式拒绝服务攻击最有效的核心策略,单纯的软件防火墙或系统内核优化,已无法抵御现代大流量、多类型的混合攻击,企业必须建立“清洗+分流+冗余”的立体防护体系,才能在攻击发生时保障业务的连续性与数据的安全性, 攻击类型识别:精准防御的前提在部署防护方案前,必须明确攻击的具体形态……

    2026年3月31日
    7700
  • 我的世界2b2t服务器怎么建?,详细步骤有哪些?

    想自己搭一个2b2t风格的服务器,核心不是装某款插件,而是用无插件原版生存玩法配合高单核性能主机和自动化备份,再做好“服务器会卡、玩家会破坏、地图会膨胀”的心理准备,很多玩家第一次接触2b2t时,都以为那里有某种特殊插件在支撑着混乱秩序,那个服务器最大特点就是没规矩,地图文件从2010年攒到现在,玩家破坏的痕迹……

    2026年8月27日
    1100
  • win10激活提示无法连接到组织服务器怎么办,怎么回事

    遇到“win10激活无法连接到组织服务器”的提示,先别慌,这不是微软官方在限制你,绝大多数情况下是你的电脑里残留了原本企业或学校的KMS激活通道记录,导致系统误以为你在组织网络中,解决思路是清除旧的激活绑定并重新走个人数字许可证通道,为什么win10激活提示无法连接到你的组织的激活服务器这个问题在二手电脑、离职……

    2026年8月22日
    1300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注