实例介绍
Asp.net MVC 处理文件的上传下载Asp.net MVC 处理文件的上传下载
愚公之资料库系列 return (file ! null & file ContentLength >0)? true false; 当你看到对应的 类的代码时,你会发现 对象作为 类型的一个属性存在。 其实是 请求的一个封装,暴漏了很多属性,包括 (其实是 集合)在集合中的每一个元素都是 的集合,护展方法是用于确保上传的文件是否存在。实 际上,这和 方法的工作原理一致。 在 中使用起来其实很容易 代码 public class Home Controller: Controller public ActionResult Index foreach (string upload in Request. Files) if ( Request Files [upload]. HasFile()continue; string path AppDomain CurrentDomain BaseDirectory +uploads/, string filename Path GetFileName(Request. Files[upload] FileName ); Request. Files [upload]. SaveAs(Path. Combine(path, filename)); return viewi 多文件上传 或许你已经比我更早的想到如何更好的将 作为一个集合使用。这意味着它不仅仅只能容纳一个文件 而能容纳多个,我们将上面的改为如下 愚公本人悉心整理 愚公之资料库系列 代码 using(Html. BeginForm( ,home", FormMethod Post, new fenctype="multipart/form-dat <input type="file name="FileUpload1/><br/> input type="file name ="FileUpload2/><br/> <input type="file name="FileUpload3"/><br/> input type="file name="FileUpload4"/><br/> <input type=file name="FileUpload5"/><br/ input type="submit" name="Submit id="Submit" value="Upload"/> <‰}%> 效果如下 Browse Browse Browse Browse… Browse. I 在 的代码中已经检査了是否所有的文件上传框中都有文件,所以即使对于多文件上传,我们也不再需要修 改 的代码,注意每一个 都有不同的 属性如果你需要调用其中一个,比如说,你 需要引用第三个输入框只需要使用 存入薮据库 在你沖我狂吼关注点分离之前,我想声明下面的代码仅仅用于作为说明功能我将 的代码放入 中,但我们都知道,这并不好。数据访问的代码应该放在 中某个部分的数据访问层中但是,卜面这段 代码仅仅可以给大家怎样将上传的文件存入数据库中一个更直观的印象,首先,我们需要创建一个数据表 并创建一个表 愚公本人悉心整理 愚公之资料库系列 域是 数据类芈,用于存储以二进制数据形成的文件,而 改为 代码 public ActionResult Index( foreach(string upload in Request. Files) if (! Request. Files [upload]. HasFile() continue; string mime Type Request Files [upload] Content Type; Stream filestream= Request. Files [upload]. Inputstream; string fileName Path GetFileName(Request. Files [upload] FileName); int fileLength Request Files [upload]. ContentLength byte[ file new byte[fileLength] ileStream. Read(fileData, 0, filelength) Trule'. Const string connect=@"Server= \SQLEXpress; Database=FileTest; Trusted_Connection using (var conn new SqlConnection( connect)) ar gry ="INSERT INTO Filestore (FileContent, Mime Type, FileName) VALUES (@Fil e Content, @Mime Type, @FileName)"j 愚公本人悉心整理 愚公之资料库系列 var cmd= new SqlCommand(gry, conn); cmd Parameters. AddwithValue(" @FileContent", fileData): cmd Parameters. AddwithValue("@Mime Type", mime Type) cmd Parameters. AddwithValue( @FileName", fileName ); conn Open( nd E uery oi return View; 修改后的代码会以循环的方式遍历页面中所有的上传文件,并检查 中是否已经加入文件,然 后,从文件中提取出个信息:文件名, 类犁文件的类型, 中的二进制流。二进制数据被转 换为数组,并以数据类型存入数据库。类型和文件名对」用户从数据库中提取文件来说非常重要。 将数据库中的文件返回给用户 你如何将文件传送给用户取决于你最开始如何存储它,如果你将文件有入数据库,你会用流的方式将文件返还给用户 如果你将文件存在硬盘中,你只需要提供一个超链接即可,或者也可以以流的方式。每当你需要以流的方式将文件送 到浏览器中,你都的使用到方法的重载(而不是使用我们先前一直使用的方法)对于方法有类 返回类型 和 第一种类型用于直接从磁盘返冋文件:第二种类型 用于将数组返回客户端:而第三种方式将已经生成并打开的流对象的内容返回客户端。 如果你还记得的话,我们将上传的文件存入了数据库,并以数组的形式存入 域内而当需要提取时, 它仍然会以一个数组进行提取,这意味着我们使用返回 的重载如果我们想让提取的文 件名更有意义,我们使用接受个参数的重载,三个参数是数组, 类型,文件名 代码 public FilecontentResult GetFile(int id) SqlDataReader rdr; byte[] filecontent null; string mime Type =;string fileName 愚公本人悉心整理 愚公之资料库系列 const string connect =@"Server=\SQLExpress, Database=FileTest; Trusted Connection=T rue,j using (var conn= new SqlConnection( connect)) var qry =SELECT FileContent, Mime Type, FileName FROM Filestore WHERE ID= @ID var cmd= new SqlCommand(gry, conn); cmd Parameters. AddwithValue("@ID", id)i conn Open oi dr= cmd ExecuteReader (; if (rdr. HasRows) rdr, Reado: fileContent =(byte[rdr[Filecontent"]; mimeType rdr[ "MimeType"]. Tostring(; fileName= rdr["FileName"]. Tostring return File(fileContent, mimeType, fileName ); 在屮最简单的使用来使用这个 只需提供一个超链接 如果在数据库中存储的图片是图片类型,和使用超链接不同的是,我们通过指向 的一个带有属 性的 标签来获取 愚公本人悉心整理 愚公之资料库系列 面再让我们来看看使用 用」从硬盘提取文件)是多简单的事: 代码 public FilePathResult GetFileFromDisk() tring path AppDomain Current Domain BaseDirectory +uploads/"; string fileName =test. txt j return File(path fileName,text/plain",test. txt 而这也可以用过超链接提取 而最后一个选择 也可以从磁盘中提取文件 代码 public FilestreamResult StreamFileFromDisk() string path= AppDomain. CurrentDomain BaseDirectory +uploads/; string fileName =test. txt i return File (new Filestream(path fileName, FileMode Open),text/plain", fileNam 的区别是什么?我们乂该如何取舍呢?主要的区别是 使用 来将文件写入输出流。这个方法并不会在服务器内存中进行缓冲,所以这对于发送人 文件是一个不错的选择。他们的区别很像 和 的区别。于此同时, 还有一个这可 能导致文仵传到客户端一半就停了,甚至无法传送。而 在这方面就很棒了。比如说:返回 控件在内存中生成的图表图片,而这并不需要将图片存到磁盘中 本材料由愚公从网上获取资源并通过实践整理而得 愚公本人悉心整理 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论