手机版

净核心实现图片文件上传下载功能

时间:2021-09-04 来源:互联网 编辑:宝哥软件园 浏览:

当下。净核心项目可是如雨后春笋一般发展起来,作为。网大军中的一员,我热忱地拥抱了。净核心并且积极使用其进行业务的开发,我们先介绍下。净核心项目下实现文件上传下载接口。

一、开发环境

毋庸置疑,宇宙第一IDE VisualStudio 2017

二、项目结构

文件控制器文件上传下载控制器

图像控制器图片上传下载控制器

Return_Helper_DG返回值帮助类

三、关键代码

1、首先我们来看Startup.cs这个是我们的程序启动配置类,在这里我们进行一系列的配置。

跨域配置:

当然跨域少不了dll的引用,我们使用Nuget引用相关的引用包

服务器资源路径置换,这样可以防止客户端猜测服务端文件路径,制造一个虚拟的隐射进行访问,提高了安全性。

Startup.cs的完整代码如下:

使用微软AspNetCore。建设者使用微软。托管;使用微软AspNetCore。超文本传送协议(Hyper Text Transport Protocol的缩写)使用微软。扩展。配置;使用微软。扩展。依赖注射;使用微软。扩展名。文件提供商使用微软。扩展。日志记录;使用系统IO;命名空间QX_Core .文件中心{公共类启动{公共启动(IHostingEnvironment env){ var builder=新配置生成器().SetBasePath(env .ContentRootPath ).AddJsonFile('appsettings.json ',optional: false,reloadOnChange: true).AddJsonFile($'appsettings .{env .环境名称}。json ',optional: true ).AddEnvironmentVariables();配置=构建器build();} public IConfigurationroot Configuration { get;} //此方法由运行时调用。使用此方法向容器添加服务public void ConfigureServices(IServiceCollection services){//添加框架服务。服务addMVc();# CORS地区服务AddCors(options={ options .AddPolicy('AllowSpecificOrigin ',builder=builder .带起源(' http://localhost :3997 ').AllowAnyHeader().AllowAnyOrigin().allowy method());});#endregion } //运行时调用此方法。使用此方法配置超文本传送协议请求管道公共空间配置(IApplicationBuilder)应用程序,IHostingEnvironment env,ILoggerFactory logger factory){//logger factory .添加控制台(配置GetSection('日志');//记录器工厂.AddDebug();应用程序.UseMvc();//显示带有命名策略的UseCors .应用程序.UseCors(' allowspecificicorigin ');应用程序.使用静态文件(新的静态文件选项(){文件提供程序=新的物理文件提供程序(路径。合并(目录. GetCurrentDirectory(),@'wwwroot/Files '),请求路径=新路径字符串('/src ')});} }}2、Return_Helper_DG类用户设置一个统一的返回值反馈到客户端Return_Helper_DG类的代码如下:

使用系统。净值;/* * *作者:小琪*创建:2017-5-19 15:15:05 * */命名空间QX_Core .文件中心。帮助器{公共抽象类Return_Helper_DG {公共静态对象ISS process _ Msg _ Data _ HttpCode(bool ISS process,字符串味精,动态数据,HttpStatusCode HttpCode=HttpStatusCode .好的){ 0返回new { isSuccess=isSuccess,msg=msg,httpCode=httpCode,data=data };}公共静态对象success _ Msg _ Data _ DCount _ HttpCode(字符串味精,动态数据=null,int dataCount=0,HttpStatusCode=HttpStatusCode .好的){ 0返回new { isSuccess=true,msg=msg,httpCode=httpCode,data=data,dataCount=dataCount };}公共静态对象error _ Msg _ Ecode _ Elevel _ HttpCode(字符串Msg,int errorCode=0,int errorLevel=0,HttpStatusCode=HttpStatusCode .内部服务器)返回new { isSuccess=false,msg=msg,httpCode=httpCode,errorCode=errorCode,错误级别=错误级别};} }}3、文件控制器是我们的文件上传控制器接口,这里定义了对上传的文件的接收操作,并且在控制器上启用跨域配置

使用微软AspNetCore。克-奥二氏分级量表使用微软。托管;使用微软AspNetCore。手动音量调节使用微软. Net。Http。头球使用QX_Core .文件中心。帮手;使用系统;使用系统。集合。通用;使用系统IO;使用系统Linq .命名空间QX_Core .文件中心。控制器{//[产品('应用程序/JSON ')][路由(' API/[控制器]')][启用CORS(' allowspecificicorigin ')]公共类文件控制器:控制器{ private ihostingenvironmentostingev;公共文件控制器(IHostingEnvironment env){ this。hostingev=env}[httpset]public IActionResult Post(){ var file=Request .表单。文件;长尺寸=文件。总和(f=f。长度);//大小100MB拒绝上传!if(大小104857600){ Return Json(Return _ Helper _ DG).错误_ Msg _ Ecode _ Elevel _ HttpCode('文件总大小100MB,服务器拒绝!'));} Liststring文件路径result list=new ListString();foreach(文件中的定义变量文件){ var FIlename=contentdispositionheader值.解析(文件内容处置)。文件名。修剪(“”);字符串文件路径=主机.WebRootPath[电子邮件保护]' \文件\文件\ ';if(!目录。存在(文件路径)){目录创建目录(文件路径);} fileName=Guid .NewGuid()' .文件名。拆分('。')[1];字符串文件全名=文件路径文件名;使用(文件流文件系统=系统.创建(文件全名)){文件复制到(fs);fs .flush();}文件路径结果列表.添加($ '/src/Files/{ fileName } ');}字符串消息=$ ' {文件.已成功上载计数}个文件/{size}个字节!返回Json(Return_Helper_DG .success _ Msg _ Data _ DCount _ HttpCode(消息,文件路径结果列表,文件路径结果列表。计数));} }}在上述的代码中,我们对上传的文件的大小进行了限制,并且对文件的大小进行反馈。

4、图像控制器图片上传控制器接口,类似于文件,不过对上传的图片类型进行了校验和限制

使用微软AspNetCore。克-奥二氏分级量表使用微软。托管;使用微软AspNetCore。手动音量调节使用微软. Net。Http。头球使用QX_Core .文件中心。帮手;使用系统;使用系统。集合。通用;使用系统IO;使用系统Linq .命名空间QX_Core .文件中心。控制器{//[产品('应用程序/JSON ')][路由(' API/[控制器]')][EnableCors(' allowspecificicorigin ')]公共类图片控制器:控制器{ private ihostingenvironmentostingev;string[]PictureformatArray={ ' png ',' jpg ',' jpeg ',' bmp ',' gif ',' ico ',' PNG ',' JPG ',' JPEG ',' BMP ',' GIF ',' ICO ' };公共图片控制器(IHostingEnvironment env){ this。hostingev=env}[httpset]public IActionResult Post(){ var file=Request .表单。文件;长尺寸=文件。总和(f=f。长度);//大小100MB拒绝上传!if(大小104857600){ Return Json(Return _ Helper _ DG).错误_ Msg _ Ecode _ Elevel _ HttpCode('图片总大小100MB,服务器拒绝!'));} Liststring文件路径result list=new ListString();foreach(文件中的定义变量文件){ var FIlename=contentdispositionheader值.解析(文件内容处置)。文件名。修剪(“”);字符串文件路径=主机.WebRootPath[电子邮件保护]' \文件\图片\ ';if(!目录。存在(文件路径)){目录创建目录(文件路径);}字符串后缀=fileName .拆分('。')[1];if(!图片格式数组。包含(后缀){ return Json(Return_Helper_DG .错误_ Msg _ Ecode _ Elevel _ HttpCode('图片格式不支持!您必须上传后缀为“png”、“jpg”、“jpeg”、“bmp”、“gif”、“ico”的文件。'));} fileName=Guid .NewGuid()' .后缀;字符串文件全名=文件路径文件名;使用(文件流文件系统=系统.创建(文件全名)){文件复制到(fs);fs .flush();}文件路径结果列表.添加($ '/src/Pictures/{ fileName } ');}字符串消息=$ ' {文件.已成功上载计数}个文件/{size}个字节!返回Json(Return_Helper_DG .success _ Msg _ Data _ DCount _ HttpCode(消息,文件路径结果列表,文件路径结果列表。计数));} }}到此,我们的文件图片上传代码已经全部完成,下面我们对文件上传的客户端进行实现

四、客户端的实现

客户端我们很简单地用jQuery Ajax的方式进行图片文件的提交,客户端代码的实现:

!doctype头脚本src=' http : jquery-3。2 .0 .量滴js '/script脚本$(文档)。ready(function(){ var appDomain=' http://localhost :53972/';$('#btn_fileUpload ').单击(函数(){ var文件上传=$(' # files ')).get(0);var files=file upload . file var data=new FormData();for(var I=0;我。文件。长度;I){数据。追加文件.名称、文件[I]);} $.ajax({ type: 'POST ',url: appDomain 'api/Pictures ',contentType: false,processData: false,Data:数据,success 3360函数(数据){ console。日志(JSON。stringify(数据));},错误:函数(){ console。日志(JSON。stringify(数据));} });});//结束点击})/脚本/标题/标题正文文章标题H2文章-表单/H2/标题p表单id='上传表单' enctype='多部分/表单-数据'输入类型='file' id='files' name='files '占位符='file' multiplefile-multiple属性可以选择多项brbr输入类型='button' id='btn_fileUpload '值='文件上传'/表单/p/文章/正文五、代码测试

1.启动服务器

我们可以看到一个控制台和一个网自动启动,并且网显示默认的价值观念控制器的请求返回值。

2.图片上传

我们使用创建交互式、快速动态网页应用的网页开发技术的方式进行图片的上传操作,打开测试网页面,并且选择图片,点击上传,查看控制台返回的结果:

可以看到,一张图片上传成功!

输入返回的地址,我们可以看到成功访问到了图片,特别注意这里服务器路径的改变:

多图片上传:

可见,多图片上传没有任何问题!

同样进行文件上传的测试:

同样,文件上传也没什么问题!

不及物动词摘要

至此,我们已经实现了所有预期的上传功能。Net Core图像文件!

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:净核心实现图片文件上传下载功能是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。