LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網站管理員

【C#.net】如何使用 Web API 輕松實現(xiàn)文件上傳功能

admin
2025年1月20日 17:23 本文熱度 134

前言

在Web應用程序開發(fā)過程中,將文件上傳到服務器上是一種常見的需求,在很多場景中都非常有用,比如用戶頭像、圖片等資源上傳到服務器后進行存儲或進一步處理。本文將介紹如何使用.NET Web API 實現(xiàn)文件上傳。

實現(xiàn)過程

1、使用 Visual Studio 2022 創(chuàng)建項目 ASP.NET Core Web API 項目

2、配置服務和中間件

添加必要的服務和中間件來處理文件上傳,如果上傳文件存儲目錄不是默認的 wwwroot 目錄,則可以使用 UseStaticFilesr 中間件服務重載方法。使用app.UseStaticFiles配置靜態(tài)文件中間件以達到創(chuàng)建虛擬路徑。如下面代碼段:

using Microsoft.AspNetCore.Http.Features;using Microsoft.Extensions.FileProviders;namespace Fountain.WebAPI.UploadDemo{    public class Program    {        public static void Main(string[] args)        {            var builder = WebApplication.CreateBuilder(args);            builder.Services.AddControllers();                        builder.Services.AddEndpointsApiExplorer();            builder.Services.AddSwaggerGen();            builder.Services.Configure<FormOptions>(options =>            {                options.ValueLengthLimit = int.MaxValue;                // 設置允許接收非常大的請求體長度                options.MemoryBufferThreshold = 1;                // 設置單個文件大小限制為2MB                options.MultipartBodyLengthLimit = 2097152;            });            var app = builder.Build();            if (app.Environment.IsDevelopment())            {                app.UseSwagger();                app.UseSwaggerUI();            }            app.UseHttpsRedirection();            app.UseAuthorization();            string uploadPath = (app.Environment.ContentRootPath + "/Upload").Replace("/", "\\");             if (!Directory.Exists(uploadPath))            {                Directory.CreateDirectory(uploadPath);            }            // 使用自定義的靜態(tài)文件目錄            app.UseStaticFiles(new StaticFileOptions            {                FileProvider = new PhysicalFileProvider(                    Path.Combine(app.Environment.ContentRootPath, "upload")                ),                RequestPath = "/upload"            });            app.MapControllers();            app.Run();        }    }}

3、創(chuàng)建控制器

在項目的 Controllers 文件夾中,創(chuàng)建文件上傳的控制器類。如下面代碼:

using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Logging;namespace Fountain.WebAPI.UploadDemo.Controllers{    [Route("api/[controller]")]    [ApiController]    public class UploadFileController : ControllerBase    {        public static IWebHostEnvironment webHostEnvironment;        /// <summary>        ///         /// </summary>        /// <param name="environment"></param>        public UploadFileController(IWebHostEnvironment environment)        {            webHostEnvironment = environment;        }        /// <summary>        ///         /// </summary>        /// <param name="file"></param>        /// <returns></returns>        [HttpPost]        public async Task<IActionResult> Upload(IFormFile file)        {            ResponseContent response = new ResponseContent();            try            {                // 在服務器端,應該驗證上傳文件的類型,防止惡意文件(如可執(zhí)行文件)的上傳。                // 可以通過檢查文件的擴展名或者內容類型(ContentType屬性)來進行驗證                var allowedExtensions = new[] { ".jpg"".png"};                var fileExtension = Path.GetExtension(file.FileName);                if (!allowedExtensions.Contains(fileExtension))                {                    response.Success = false;                    response.Message = "不允許的文件類型";                    return StatusCode(500, response);                }                if (file == null || file.Length == 0)                {                    response.Success = false;                    response.Message = "沒有文件上傳";                    return StatusCode(500, response);                }                // 文件大小限制,限制為2MB                if (file.Length > 2 * 1024 * 1024)                 {                    response.Success = false;                    response.Message = "文件太大";                    return StatusCode(500, response);                }                // 設置上傳文件存放路徑                string webPath =string.Format("{0}{1}{2}{3}",webHostEnvironment.ContentRootPath,Path.DirectorySeparatorChar,"Upload", Path.DirectorySeparatorChar);                if (!Directory.Exists(webPath))                {                    Directory.CreateDirectory(webPath);                }                //                 using (FileStream filestream = System.IO.File.Create(webPath  + file.FileName))                {                    file.CopyTo(filestream);                    filestream.Flush();                }            }            catch (Exception exception)            {                response.Success = false;                response.Message = "文件上傳失敗";                return StatusCode(500, response);            }            response.Success = false;            response.Message = "上傳成功";            return Ok(response);        }    }}
定義響應實現(xiàn)
namespace Fountain.WebAPI.UploadDemo{    public class ResponseContent    {        /// <summary>        /// 狀態(tài)        /// </summary>        public bool Success { get; set; }        /// <summary>        /// 消息        /// </summary>        public string Message { get; set; }        /// <summary>        /// 保存響應數(shù)據(jù)        /// </summary>        public object Data { get; set; }    }}

4、優(yōu)化與改進

 文件大小限制

默認情況下,ASP.NET Core 對上傳文件的大小設有一定限制。若需突破這一限制,可在 Program.cs 文件中進行配置。

builder.Services.Configure<FormOptions>(options =>{    options.ValueLengthLimit = int.MaxValue;    // 設置允許接收非常大的請求體長度    options.MemoryBufferThreshold = 1;    // 設置單個文件大小限制為2MB    options.MultipartBodyLengthLimit = 2097152;});

可以通過在上傳方法中嵌文件大小驗證邏輯,限制文件大小的上傳。

// 文件大小限制 限制為2MBif (file.Length > 2 * 1024 * 1024) {    response.Success = false;    response.Message = "文件太大";    return StatusCode(500, response);}

文件類型驗證

文件上傳,需確保文件為我們需要的類型(如圖片類型),可以通過在上傳方法中嵌文件類型的驗證邏輯。

// 在服務器端,應該驗證上傳文件的類型,防止惡意文件(如可執(zhí)行文件)的上傳。// 可以通過檢查文件的擴展名或者內容類型(ContentType屬性)來進行驗證var allowedExtensions = new[] { ".jpg"".png" };var fileExtension = Path.GetExtension(file.FileName);if (!allowedExtensions.Contains(fileExtension)){    response.Success = false;    response.Message = "不允許的文件類型";    return StatusCode(500, response);}

小結

通過上述一系列步驟,我們就可在 Web API 中實現(xiàn)文件的上傳功能。在實際應用場景中,我們還需根據(jù)業(yè)務需求進一步拓展完善該功能。


該文章在 2025/1/22 10:21:10 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
曰本AV在线电影精品 | 日韩另类在线第一页 | 亚洲五月天激情在线观看 | 一日本道a高清免费播放 | 在线观看1024国产 | 最新中文国产一区二区 |