附件

您所在的位置:网站首页 上传附件的格式 附件

附件

#附件| 来源: 网络整理| 查看: 265

开发工具与关键技术:VS+附件上传 作者: 李伙 撰写时间:

在学习MVC过程中,我们都会要上传一些文件之类的东西,比如上传图片,上传文档之类的,因此我们接下来简单认识一下附件—文件上传,附件上传可以上传图片、文档等等。先看看js部分的代码: 在这里插入图片描述 如上图所示:先为附件按钮添加一个点击事件,点击附件按钮后触发附件文件上传表单的点击事件。然后为附件文件上传表单添加一个change改变事件,change():当元素的值发生改变时,会发生change事件,然后在里面写代码。定义一个变量来接收匹配的元素的第一个元素,prop():获取在匹配的元素集中的第一个元素的属性值。然后用“if else”判断是否已经选择了文件,如果未选择就提醒用户选择文件,然后也是用“if else”来判断上传的文件是否大于了20MB,如果大于了就提醒用户上传的文件不能超过20MB,因为在js中上传的文件不能超过20MB,如果超过就要用第三方上传的插件。如果小于20MB的就继续执行下面的代码。 在这里插入图片描述 如上图所示:判断完文件大小后,就到了上传的代码了。准备开始文件上传,开始文件上传是使用XMLHttpRequest上传,XMLHttpRequest也就是ajax的底层封装。先看看它的几个步骤: (1)new一个FormData对象,这是用来装文件的。 (2)将第一个文件放入FormData,append():向每个匹配的元素内部追加内容。 (3)new一个XMLHttpRequest对象,主要是为了注册监听事件。 (4)发生成功事件,onload表示的是成功,上传成功后先关闭加载层,然后判断变量是否等于true,如果等于就刷新一下附件列表,然后提醒用户上传成功。 (5)发送上传失败事件,onerror表示的是失败,上传失败后先关闭加载层,然后提醒用户上传失败。 (6)上传进度—会不断被调用,upload.onprogress表示的是上传进度,如event.total是需要传输的总字节,event.loaded是已经传输的字节。如果event.lengthComputable不为真,则event.total等于0。 (7)上传文件,上传文件一定要用POST方式提交,因为用get方式是提交不了的。上传文件要传入两个参数,第一个参数是POST方式提交,第二个参数是路径(url)。 (8)发送数据,它发生的数据是之前我们new一个FormData对象里面的数据。

写完js部分的代码后,再看看控制器中的代码: 在这里插入图片描述 如上图所示:先用“try catch”来捕获异常,然后判断上载文件的大小,ContentLength:获取上载文件的大小(以字节为单位),再判断一下上传的文件是否大于20MB,如果大于就提醒用户上传的文件不能大于20MB。然后就是获取session中的文件表,最后是检查目录是否存在,不存在就创建,Exists():确定给定路径是否引用磁盘上的现有目录。MapPath():在派生类中重写时,返回与Web服务器上的指定虚拟路径相对应的物理文件路径, CreateDirectory():再指定路径创建所有目录和子目录。 在这里插入图片描述 如上图所示:分为几个步骤:(1)获取文件类型,也就是文件扩展名,如:.txt。Path:对包含文件或目录路径信息的string实例执行操作。GetExtension():返回指定的路径字符串的扩展名。(2)获取不包含文件扩展名的名称。GetFileNameWithoutExtension():返回不具有扩展名的指定路径字符串的文件名。(3)获取原始文件名称。(4)为文件名称添加时间字符串,避免文件名称相同。DateTime表示时间上的一刻,通常以日期和当天的时间表示,Now表示获取一个DateTime对象,该对象设置为此计算机上的当前日期和时间,表示为本地时间,ToString()表示使用指定的格式将当前DateTime对象的值转化为它的等效字符串表示形式,而这里的“yyyy-MM-dd-HH-mm-ss-ffff”表示为“年月日时分秒毫秒”。(5)保存文件的路径。(6)保存文件。 在这里插入图片描述 如上图所示:因为上传的文件有很多种格式,所以要判断上传的文件格式到底是属于什么类型的。 在这里插入图片描述 如上图所示:查询出数据后给它们赋值,然后更新session。这里用到session的原因是:附件上传没点保存之前是不应该出现在数据库中的,因为附件上传属于公告的附加数据,公告还没保存,所以附件上传还没存到数据库,而我们要进行表格的查询,所以需要找个容器将附件上传的数据先保存起来,而附件上传的最好容器就是Session,不同的Session之间空间是独立的,这样的话就不会互相干扰。Session里面的数据只要不被清空,默认也不会删除,所以数据比较稳定的。因为把附件上传的数据存入到了Session,所以在前面查询数据时就会查询出Session中的数据,而不是在数据库中查询,所以在上传附件之前要到Session中去找是否以前上传过,如果以前上传过,就将数据转化出来;如果以前没有上传过,就创建一个新的Session。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3