ASP .净核心文件上传与下载实例(多种上传方式)
前言
前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP .净核心了。
打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧。
ASP .网络核心2.0发展到现在,已经很成熟了。下个项目争取使用吧。
正文
1.使用模型绑定上传文件(官方例子)
官方机器翻译的地址:https://个文件。微软。com/en-us/aspnet/core/MVC/models/文件上传
这里吐槽一下- -,这铥的机器翻译.还不如自己看E文的.
首先我们需要创建一个形式表单如下:
表单方法=' post ' enctype=' multipart/form-data ' ASP-controller=' UpLoadFile ' ASP-action=' filestave ' div pForm表单多个上传文件:/p输入类型='文件'名称='文件'多个/输入类型='提交'值='上传//div /div /form其中ASP-控制器和asp-action,(这个是TagHelper的玩法,以后讲)是我们要访问的控制器和方法。
给我们的投入标签加上多个的属性,来支持多文件上传。
创建一个控制器,我们编写上传方法如下:
公共异步任务结果文件保存(列表文件){变量文件=请求。表单。文件;长尺寸=文件。总和(f=f。长度);字符串webRootPath=_ hostingEnvironment .WebRootPathstring contentRootPath=_ hostingEnvironment .ContentRootPathforeach(文件中的var formFile){ if(formFile .长度0) {字符串文件扩展名=GetFileExt(formFile .FileName);//文件扩展名,不含"."长文件大小=formFile .长度;//获得文件大小,以字节为单位字符串新文件名=系统Guid。NewGuid().ToString()" "fileExt//随机生成新的文件名var文件路径=webRootPath '/upload/'新文件名;使用(var stream=新的FileStream(文件路径,文件模式。创建){等待表单文件复制同步(流);} } }返回Ok(新的{计数=文件。计数,大小});}这里我们采用Asp .净核心的新接口信息文件的具体定义如下:
公共接口表单文件{字符串内容类型{ get}字符串content disposition { get} IHeaderDictionary标头{ get}长长度{ get }字符串名称{ get}字符串FileName { get } Stream OpenReadStream();void CopyTo(流目标);任务复制同步(流目标,取消令牌取消令牌=空);}上面的代码使用了IHostingEnvironment来获取项目的根目录地址。
构造函数注入的代码如下:
私有只读IHostingEnvironment _ hosting environment;公共上传文件控制器(ihostingenvironment)hosting environment { _ hosting environment=hosting environment;}这样,我们就完成了控制器的编写,然后到运行前端,上传文件.效果如下:
通过表单文件的复制同步方法,我们就可以把这个文件流复制下来并保存到本地即可。
2.使用埃阿斯上传文件
上面我们是使用表单上传,但是项目过程中,大部分情况会使用埃阿斯进行上传,所以我们就来讲讲如何使用埃阿斯上传。
首先编写超文本标记语言代码如下:
差异表单id='uploadForm' AJAX上传多文件:输入类型='file' name='file' multiple /输入类型='按钮'值='上传onclick='doUpload()'//form/div编写射流研究…代码如下(这里我们使用上传对象来上传):
函数doUpload(){ var formData=new formData($(' # uploadForm ')[0]);$.Ajax({ Ul : ' @ Ul .action(' filestave ')',type: 'POST ',data: formData,async: false,cache: false,contentType: false,processData: false,success : function(返回数据){ alert(返回数据);},错误:函数(返回数据){ alert(返回数据);} });}后台代码不做任何修改。我们会发现。直接在列表文件中是无法获取到文件的。
通过调试,我们可以发现,文件是上传成功的,但是放在了请求。表单。文件当中。
所以修改后台代码如下:
公共异步任务结果文件保存(){可变日期=请求变量文件=请求。表单。文件;长尺寸=文件。总和(f=f。长度);字符串webRootPath=_ hostingEnvironment .WebRootPathstring contentRootPath=_ hostingEnvironment .ContentRootPathforeach(文件中的var formFile){ if(formFile .长度0) {字符串文件扩展名=GetFileExt(formFile .FileName);//文件扩展名,不含"."长文件大小=formFile .长度;//获得文件大小,以字节为单位字符串新文件名=系统Guid。NewGuid().ToString()" "fileExt//随机生成新的文件名var文件路径=webRootPath '/upload/'新文件名;使用(var stream=新的FileStream(文件路径,文件模式。创建){等待表单文件复制同步(流);} } }返回Ok(新的{计数=文件。计数,大小});}改为直接从请求。表单。文件中获取文件集合。~
3.使用上传组件上传文件
很久之前.呃.封装过一个上传组件的射流研究…
.我们也用封装好的射流研究…来试试。超文本标记语言和射流研究…代码如下,后台代码不需要修改,还是直接从请求。表单。文件获取即可:
div id=' upfliediv '/div $(function(){//实例化文件上传$('#upfliediv ').powerWebUpload({ auto: true,file numlimit : { 1 });$('#upfliediv ').CleanUpload();})上传效果如图:
4.文件下载。
上传了文件,我们当然需要下载。
直接通过统一资源定位器地址下载是一种极其不安全的方式。这里我们采用返回流的形式来下载。
后台代码如下:
///摘要///文件流的方式输出////summary////returns/returns public IActionResult DownLoad(字符串文件){ var addrUrl=file变化流=系统。打开读取;字符串fileExt=GetFileExt(文件);//获取文件的内容类型var provider=新文件扩展名内容类型provider();var memi=提供程序。映射[FileExt];返回文件(流,内存,路径GetFileName(addrUrl));}这里值得注意的是,以前我们想获取内容类型直接使用模拟映射.GetMimeMapping(文件);就好了。
但是这个类是在系统。网下的核心已经抛弃了现有的系统。Web .
所以在ASP .净核心中我们需要通过新的类文件扩展内容类型提供程序来获取文件的内容类型
编写HTML JS代码如下(PS:因为是演示,所以写的比较简陋):
差异输入类型=' text ' id=' filename '/button onclick=' DownLoad()'下载/button/div函数DownLoad(){ var filename=$(' # filename ').val();window.location.href='@Url .操作(' DownLoad ')?文件=' filename}效果如图:
以上这篇ASP .净核心文件上传与下载实例(多种上传方式)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
版权声明:ASP .净核心文件上传与下载实例(多种上传方式)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。