[.Net 6]寫一個簡單的文件上傳控件后端


此項目是配合上一篇文章[Vue]寫一個簡單的文件上傳控件 - 林曉lx - 博客園 (cnblogs.com)

的后端程序,使用.Net 6項目框架搭建,開發前請安裝Visual Studio 2022Visual Studio 2022 版本 17.1 發行說明 | Microsoft Docs

這個后端是一個FakeApi,目標是調用文件上傳獲得File對象。

搭建項目框架

新建一個.Net 6 項目,選擇Asp.Net Core Web Api 模板

定義文件模型

 [Serializable] public class File { [Required] public string FileName { get; set; } public string MimeType { get; set; } public FileType FileType { get; set; } public byte[] Content { get; set; } public Guid? ParentId { get; set; } public long? OwnerUserId { get; set; } public string FileContainerName { get; set; } }

文件類型枚舉:1 為文件夾,2 為常規文件

    public enum FileType { Directory = 1, RegularFile = 2 }

編寫文件上傳功能代碼

添加控制器FileController.cs,並鍵入r

        /// <summary> /// 上傳文件接口 /// </summary> /// <param name="input">文件上傳傳輸對象</param> /// <returns></returns> /// <exception cref="NoUploadedFileException"></exception> [Route("upload")] [HttpPost] [RequestFormLimits(ValueLengthLimit = int.MaxValue, MultipartBodyLengthLimit = long.MaxValue)] [RequestSizeLimit(long.MaxValue)] public async Task<bool> ActionCreateAsync([FromForm] CreateFileInput input) { //判斷是否上傳了文件內容 if (input.File == null) { throw new NoUploadedFileException(); } var fileName = input.File.FileName; await using var memoryStream = new System.IO.MemoryStream(); //將文件內容復制到流中 await input.File.CopyToAsync(memoryStream); //創建文件類的實體 var file = new File { FileContainerName = input.FileContainerName, FileName = fileName, MimeType = input.File.ContentType, FileType = input.FileType, ParentId = input.ParentId, OwnerUserId = input.OwnerUserId, //讀取流來獲得完整的文件二進制內容 Content = memoryStream.ToArray() }; Console.WriteLine($"文件名:{file.FileName}", $"文件大小:{file.Content.Length} 字節"); return true; } 

注意:

RequestSizeLimit是Asp.Net請求大小限制,默認只有30M。

RequestFormLimits是表單上傳的文件長度限制

新建Program.cs文件,鍵入一下代碼

var builder = WebApplication.CreateBuilder(args); builder.Services.AddCors(options => { options.AddPolicy(name: "default", policy => { policy.AllowAnyMethod() .AllowAnyHeader() .AllowAnyOrigin(); }); }); // Add services to the container. builder.Services.AddControllers(); var app = builder.Build(); app.UseCors("default"); // Configure the HTTP request pipeline. app.UseAuthorization(); app.MapControllers(); app.MapGet("/readme", () => { return "文件上傳服務已啟動,請post請求至http://localhost:14149/file/upload"; }); app.Run();

 測試

項目根目錄運行

dotnet run

 

上傳過的文件將打印在控制台中:

測試已通過

完整代碼:

file-uploader-sample/api at master · jevonsflash/file-uploader-sample (github.com)

項目地址:

jevonsflash/file-uploader-sample (github.com)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM