多用户网站源码分享?多用户建站系统源码

本篇文章给大家谈谈多用户网站源码分享,以及多用户建站系统源码对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

我们将借助.NET提供的IFormFile接口和其他接口以及使用.NETCore6WebAPI的分步实现来讨论单个和多个文件上传。

介绍

.NET提供了一个IFormFile接口,它表示HTTP请求中传输的文件。此外,它还提供了许多属性,如ContentDisposition、ContentType、FileName、Headers、Name和Length。IFormFile还提供了许多方法,例如复制请求流内容、打开请求流进行读取等等。

分步实施

步骤1

创建新的.NETCoreWebAPI

第2步

安装以下NuGet包

第3步

创建以下文件实体

FileDetails.cs

usingSystem.ComponentModel.DataAnnotations;\nusingSystem.ComponentModel.DataAnnotations.Schema;\nnamespaceFileUpload.Entities\n{\n[Table(&34;)]\npublicclassFileDetails\n{\n[Key]\n[DatabaseGenerated(DatabaseGeneratedOption.Identity)]\npublicintID{get;set;}\npublicstringFileName{get;set;}\npublicbyte[]FileData{get;set;}\npublicFileTypeFileType{get;set;}\n}\n}

FileUploadModel

namespaceFileUpload.Entities\n{\npublicclassFileUploadModel\n{\npublicIFormFileFileDetails{get;set;}\npublicFileTypeFileType{get;set;}\n}\n}

FileType

namespaceFileUpload.Entities\n{\npublicenumFileType\n{\nPDF=1,\nDOCX=2\n}\n}

第4步

接下来,Data文件夹内的DbContextClass.cs类

usingFileUpload.Entities;\nusingMicrosoft.EntityFrameworkCore;\nnamespaceFileUpload.Data\n{\npublicclassDbContextClass:DbContext\n{\nprotectedreadonlyIConfigurationConfiguration;\npublicDbContextClass(IConfigurationconfiguration)\n{\nConfiguration=configuration;\n}\nprotectedoverridevoidOnConfiguring(DbContextOptionsBuilderoptions)\n{\noptions.UseSqlServer(Configuration.GetConnectionString(&34;));\n}\npublicDbSet<FileDetails>FileDetails{get;set;}\n}\n}

第5步

创建IFileService和FileService文件

文件服务

usingFileUpload.Entities;\nnamespaceFileUpload.Services\n{\npublicinterfaceIFileService\n{\npublicTaskPostFileAsync(IFormFilefileData,FileTypefileType);\npublicTaskPostMultiFileAsync(List<FileUploadModel>fileData);\npublicTaskDownloadFileById(intfileName);\n}\n}

FileService

usingFileUpload.Data;\nusingFileUpload.Entities;\nusingMicrosoft.EntityFrameworkCore;\nnamespaceFileUpload.Services\n{\npublicclassFileService:IFileService\n{\nprivatereadonlyDbContextClassdbContextClass;\npublicFileService(DbContextClassdbContextClass)\n{\nthis.dbContextClass=dbContextClass;\n}\npublicasyncTaskPostFileAsync(IFormFilefileData,FileTypefileType)\n{\ntry\n{\nvarfileDetails=newFileDetails()\n{\nID=0,\nFileName=fileData.FileName,\nFileType=fileType,\n};\nusing(varstream=newMemoryStream())\n{\nfileData.CopyTo(stream);\nfileDetails.FileData=stream.ToArray();\n}\nvarresult=dbContextClass.FileDetails.Add(fileDetails);\nawaitdbContextClass.SaveChangesAsync();\n}\ncatch(Exception)\n{\nthrow;\n}\n}\npublicasyncTaskPostMultiFileAsync(List<FileUploadModel>fileData)\n{\ntry\n{\nforeach(FileUploadModelfileinfileData)\n{\nvarfileDetails=newFileDetails()\n{\nID=0,\nFileName=file.FileDetails.FileName,\nFileType=file.FileType,\n};\nusing(varstream=newMemoryStream())\n{\nfile.FileDetails.CopyTo(stream);\nfileDetails.FileData=stream.ToArray();\n}\nvarresult=dbContextClass.FileDetails.Add(fileDetails);\n}\nawaitdbContextClass.SaveChangesAsync();\n}\ncatch(Exception)\n{\nthrow;\n}\n}\npublicasyncTaskDownloadFileById(intId)\n{\ntry\n{\nvarfile=dbContextClass.FileDetails.Where(x=>x.ID==Id).FirstOrDefaultAsync();\nvarcontent=newSystem.IO.MemoryStream(file.Result.FileData);\nvarpath=Path.Combine(\nDirectory.GetCurrentDirectory(),&34;,\nfile.Result.FileName);\nawaitCopyStream(content,path);\n}\ncatch(Exception)\n{\nthrow;\n}\n}\npublicasyncTaskCopyStream(Streamstream,stringdownloadPath)\n{\nusing(varfileStream=newFileStream(downloadPath,FileMode.Create,FileAccess.Write))\n{\nawaitstream.CopyToAsync(fileStream);\n}\n}\n}\n}

第6步

在控制器部分创建FilesController.cs

usingFileUpload.Entities;\nusingFileUpload.Services;\nusingMicrosoft.AspNetCore.Http;\nusingMicrosoft.AspNetCore.Mvc;\nnamespaceFileUpload.Controllers\n{\n[Route(&34;)]\n[ApiController]\npublicclassFilesController:ControllerBase\n{\nprivatereadonlyIFileService_uploadService;\npublicFilesController(IFileServiceuploadService)\n{\n_uploadService=uploadService;\n}\n///<summary>\n///SingleFileUpload\n///</summary>\n///<paramname=&34;></param>\n///<returns></returns>\n[HttpPost(&34;)]\npublicasyncTask<ActionResult>PostSingleFile([FromForm]FileUploadModelfileDetails)\n{\nif(fileDetails==null)\n{\nreturnBadRequest();\n}\ntry\n{\nawait_uploadService.PostFileAsync(fileDetails.FileDetails,fileDetails.FileType);\nreturnOk();\n}\ncatch(Exception)\n{\nthrow;\n}\n}\n///<summary>\n///MultipleFileUpload\n///</summary>\n///<paramname=&34;></param>\n///<returns></returns>\n[HttpPost(&34;)]\npublicasyncTask<ActionResult>PostMultipleFile([FromForm]List<FileUploadModel>fileDetails)\n{\nif(fileDetails==null)\n{\nreturnBadRequest();\n}\ntry\n{\nawait_uploadService.PostMultiFileAsync(fileDetails);\nreturnOk();\n}\ncatch(Exception)\n{\nthrow;\n}\n}\n///<summary>\n///DownloadFile\n///</summary>\n///<paramname=&34;></param>\n///<returns></returns>\n[HttpGet(&34;)]\npublicasyncTask<ActionResult>DownloadFile(intid)\n{\nif(id<1)\n{\nreturnBadRequest();\n}\ntry\n{\nawait_uploadService.DownloadFileById(id);\nreturnOk();\n}\ncatch(Exception)\n{\nthrow;\n}\n}\n}\n}

第7步

在ProgramClass和DIContainer中配置一些服务

usingFileUpload.Data;\nusingFileUpload.Services;\nvarbuilder=WebApplication.CreateBuilder(args);\n//Addservicestothecontainer.\nbuilder.Services.AddControllers();\n//LearnmoreaboutconfiguringSwagger/OpenAPIathttps://aka.ms/aspnetcore/swashbuckle\nbuilder.Services.AddEndpointsApiExplorer();\nbuilder.Services.AddSwaggerGen();\nbuilder.Services.AddDbContext<DbContextClass>();\nbuilder.Services.AddScoped<IFileService,FileService>();\nvarapp=builder.Build();\n//ConfiguretheHTTPrequestpipeline.\nif(app.Environment.IsDevelopment())\n{\napp.UseSwagger();\napp.UseSwaggerUI();\n}\napp.UseAuthorization();\napp.MapControllers();\napp.Run();

第8步

在SQLServer中创建一个新数据库并将其命名为FileUploadDemo

第9步

接下来,使用以下脚本创建FileDetails表

USE[FileUploadDemo]\nGO\n/******Object:Table[dbo].[FileDetails]ScriptDate:10/1/20225:51:22PM******/\nSETANSI_NULLSON\nGO\nSETQUOTED_IDENTIFIERON\nGO\nCREATETABLE[dbo].[FileDetails](\n\t[ID][int]IDENTITY(1,1)NOTNULL,\n\t[FileName][nvarchar](80)NOTNULL,\n\t[FileData][varbinary](max)NOTNULL,\n\t[FileType][int]NULL,\nCONSTRAINT[PK_FileDetails]PRIMARYKEYCLUSTERED\n(\n\t[ID]ASC\n)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON,OPTIMIZE_FOR_SEQUENTIAL_KEY=OFF)ON[PRIMARY]\n)ON[PRIMARY]TEXTIMAGE_ON[PRIMARY]\nGO

第10步

将数据库连接放在appsettings.json文件中

{\n&34;:{\n&34;:{\n&34;:&34;,\n&34;:&34;\n}\n},\n&34;:&34;,\n&34;:{\n&34;:&34;\n}\n}

第11步

最后,我们运行应用程序

步骤12

现在,我们将通过提供基于enumid的文件和文件类型,使用swagger上传单个文件

第13步

此外,为了上传多个文件,我们使用Postman。在这里您可以看到我们使用数组索引来发送文件及其类型,它会正常工作。

第14步

稍后,根据文件id,我们可以在本地系统上的指定路径位置下载文件

第15步

这里可以在指定位置看到下载的文件

此外,在数据库中,我们可以看到我们已经使用上述端点上传的任何文件

结论

在本文中,我们讨论了使用IFormFile的单个和多个文件上传以及使用.NETCoreWebAPI的分步实现,以及从数据库中读取文件并将其保存到指定位置。

快乐学习!

关注七爪网,获取更多APP/小程序/网站源码资源!

好了,关于多用户网站源码分享和多用户建站系统源码的问题到这里结束啦,希望可以解决您的问题哈!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平