上传附件
开发工具和关键技术: Visual Studio 2015,附件上传
作者:沉稳的西装
写作时间: 2019年5月27日
今天,我和大家分享的技术是上传附件。
附件上传是直接上传数据,不需要转换类型。 但是,必须记住这两点:第一,js可以直接上传文件,20M以上的文件可以很容易地报告错误;第二,如果没有单击“保存”,附件就不能保存到数据库。 必须使用Session才能临时保存。
一、在视图中写附件的上传方法。 此方法限制文件上载的大小。 首先分别new FormData和XMLHttpRequest对象,然后将第一个文件放入formdata中,并写出控制器上相应方法的路径。 代码图如下。
三、如何在控制器上写附件上传。
1、首先,用attachmentFile接收页面发来的数据,以字节为单位获取上传文件的大小。 检查目录是否存在,如果不存在,创建它,重命名它,添加时间字符串以避免文件名相同,并写下保存文件的路径和文件保存格式,包括没有文件扩展名的名称。 代码图如下。
在上图中,为什么要将文件大小限制在20M以下? 因为js会直接上传文件,所以20M以上可以很容易地报告错误。 因为需要重新分发断点,所以通常要上传小于20M的文件。 如果需要上载特别大的文件,则需要使用第三方插件,但默认情况下不支持重新分发断点,大文件的上载将很容易中断。
图中的ContentLength在派生类中重写时,以字节为单位获取上载文件的大小。 HttpPostedFileBase是类的基类,客户端提供对上载的单个文件的访问,List是初始化List类的新实例,该实例为空,具有默认初始容量,List为yes 目录是一种公开的静态方法,用于创建、移动和枚举路径和子目录。 这个类不能继承。 Exists确定指定的路径是否引用磁盘上的现有目录。 当派生类被重写时,MapPath返回与Web服务器上指定虚拟路径相对应的物理文件路径。 CreateDirectory将在指定路径上创建所有目录和子目录。
2、以下是限制文件上传的类型。 fileExtension接收文件的扩展名,对其进行判断,并确定扩展名是否为相应的扩展名。 如果扩展名与写入控制器的扩展名不同,则不上传。 代码图如下。
这里有问题。 这是上传的附件。 一般来说,如果没有单击保存,则无法保存到数据库。 为什么这么说,是因为属于某个数据的附件,也就是附件。 如果没有单击保存某个数据,则无法将某个数据的附件(附件)保存到数据库中。 如果未保存在数据库中,并且要进行表单搜索,必须找到并保存容器。 在这样的网页上,所以在上传附件之前,请在Session列表中检查一下,看看以前是否上传过这个数据。 如果有转换它的东西,没有它的话就是新的附件,空数据。 Session[“sessionFiles”]是一个大容器,list是Session[“sessionFiles”]。
图中的Contains返回一个值,指示指定字符串是否显示在此字符串中。
3、但是,在这里上传4M以上的文件,还是会出错的。 为什么会这样呢? 因为默认配置为ASP.NET.MVC默认上传4M左右,超过4M则上传失败。 在项目列表中,打开Web.config。 您可以更改此处的配置。 代码图如下。