news 2026/6/25 11:52:42

医疗系统中大文件上传插件如何实现断点续传和加密功能?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
医疗系统中大文件上传插件如何实现断点续传和加密功能?

这篇文章介绍了Asp.Net上传文件并配置可上传大文件的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
ASP.NET 包含两个控件可以使用户向网页服务器上传文件。一旦服务器接受了上传的文件数据,那么应用程序就可以进行保存,进行检查或者忽略它。

几种常见的方法,本文主要内容包括:
第一部分:首先我们来说一下如何解决ASP.net中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改Web.Config文件来自定义最大文件大小,如下:
这样上传文件的最大值就变成了4M,但这样并不能让我们无限的扩大MaxRequestLength的值,因为ASP.NET会将全部文件载入内存后,再加以处理。解决的方法是利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据。实现方法如下:

IServiceProvidERProvider=(IServiceProvider)HttpContext.Current;HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));byte[]bs=wr.GetPreloadedEntityBody();if(!wr.IsEntireEntityBodyIsPreloaded()){intn=1024;byte[]bs2=newbyte[n];while(wr.ReadEntityBody(bs2,n)>0){..}}

这样就可以解决了大文件的上传问题了。
第二部分:下面我们来介绍如何以文件形式将客户端的一个文件上传到服务器并返回上传文件的一些基本信息。
首先我们定义一个类,用来存储上传的文件的信息(返回时需要)。

publicclassFileUpLoad{publicFileUpLoad(){}///上传文件名称publicstringFileName{get{returnfileName;}set{fileName=value;}}privatestringfileName;///上传文件路径publicstringFilePath{get{returnfilepath;}set{filepath=value;}}privatestringfilepath;///文件扩展名publicstringFileExtension{get{returnfileExtension;}set{fileExtension=value;}}privatestringfileExtension;}

另外我们还可以在配置文件中限制上传文件的格式(App.Config):

.jpg|.gif|.png|.bmp

这样我们就可以开始写我们的上传文件的方法了,如下:

publicFileUpLoadUpLoadFile(HtmlInputFileInputFile,stringfilePath,stringmyfileName,boolisRandom){FileUpLoadfp=newFileUpLoad();stringfileName,fileExtension;stringsaveName;//建立上传对象HttpPostedFilepostedFile=InputFile.PostedFile;fileName=System.IO.Path.GetFileName(postedFile.FileName);fileExtension=System.IO.Path.GetExtension(fileName);//根据类型确定文件格式AppConfigapp=newAppConfig();stringformat=app.GetPath("FileUpLoad/Format");//如果格式都不符合则返回if(format.IndexOf(fileExtension)==-1){thrownewApplicationException("上传数据格式不合法");}////根据日期和随机数生成随机的文件名//if(myfileName!=string.Empty){fileName=myfileName;}if(isRandom){RandomobjRand=newRandom();System.DateTimedate=DateTime.Now;//生成随机文件名saveName=date.Year.ToString()+date.Month.ToString()+date.Day.ToString()+date.Hour.ToString()+date.Minute.ToString()+date.Second.ToString()+Convert.ToString(objRand.Next(99)*97+100);fileName=saveName+fileExtension;}stringphyPath=HttpContext.Current.Request.MapPath(filePath);//判断路径是否存在,若不存在则创建路径DirectoryInfoupDir=newDirectoryInfo(phyPath);if(!upDir.Exists){upDir.Create();}//保存文件try{postedFile.SaveAs(phyPath+fileName);fp.FilePath=filePath+fileName;fp.FileExtension=fileExtension;fp.FileName=fileName;}catch{thrownewApplicationException("上传失败!");}//返回上传文件的信息returnfp;}

然后我们在上传文件的时候就可以调用这个方法了,将返回的文件信息保存到数据库中,至于下载,就直接打开那个路径就OK了。
第三部分:这里我们主要说一下如何以二进制的形式上传文件以及下载。首先说上传,方法如下:

publicbyte[]UpLoadFile(HtmlInputFilef_IFile){//获取由客户端指定的上传文件的访问HttpPostedFileupFile=f_IFile.PostedFile;//得到上传文件的长度intupFileLength=upFile.ContentLength;//得到上传文件的客户端MIME类型stringcontentType=upFile.ContentType;byte[]FileArray=newByte[upFileLength];StreamfileStream=upFile.InputStream;fileStream.Read(FileArray,0,upFileLength);returnFileArray;}

这个方法返回的就是上传的文件的二进制字节流,这样我们就可以将它保存到数据库了。下面说一下这种形式的下载,也许你会想到这种方式的下载就是新建一个aspx页面,然后在它的Page_Load()事件里取出二进制字节流,然后再读出来就可以了,其实这种方法是不可取的,在实际的运用中也许会出现无法打开某站点的错误,我一般采用下面的方法:
首先,在Web.config中加入:

这表示我打开openfile.aspx这个页面时,系统就会自动转到执行RuixinOA.Web.BaseClass.OpenFile这个类里的方法,具体实现如下:

usingSystem;usingSystem.Data;usingSystem.Web;usingSystem.IO;usingRuixin.WorkFlowDB;usingRXSuite.Base;usingRXSuite.Component;usingRuixinOA.BusinessFacade;namespaceRuixinOA.Web.BaseClass{publicclassOpenFile:IHttpHandler{publicvoidProcessRequest(HttpContextcontext){//从数据库中取出要下载的文件信息RuixinOA.BusinessFacade.RX_OA_FileManageros=newRX_OA_FileManager();EntityDatadata=os.GetFileDetail(id);if(data!=null&&data.Tables["RX_OA_File"].Rows.Count>0){DataRowdr=(DataRow)data.Tables["RX_OA_File"].Rows[0];context.Response.Buffer=true;context.Response.Clear();context.Response.ContentType=dr["CContentType"].ToString();context.Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(dr["CTitle"].ToString()));context.Response.BinaryWrite((Byte[])dr["CContent"]);context.Response.Flush();context.Response.End();}}publicboolIsReusable{get{returntrue;}}}}

执行上面的方法后,系统会提示用户选择直接打开还是下载。这一部分我们就说到这里。
第四部分:这一部分主要说如何上传一个Internet上的资源到服务器。
首先需要引用System.Net这个命名空间,然后操作如下:

HttpWebRequesthwq=(HttpWebRequest)WebRequest.Create("http://localhost/pwtest/webform1.aspx");HttpWebResponsehwr=(HttpWebResponse)hwq.GetResponse();byte[]bytes=newbyte[hwr.ContentLength];Streamstream=hwr.GetResponseStream();stream.Read(bytes,0,Convert.ToInt32(hwr.ContentLength));//HttpContext.Current.Response.BinaryWrite(bytes);

HttpWebRequest可以从Internet上读取文件,因此可以很好的解决这个问题。

下载示例

下载示例

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 19:48:28

金融行业大文件上传解决方案中如何加入断点续传功能?

大文件传输系统建设方案 作为福建互联网上市公司项目负责人,针对公司大文件传输需求,我主导完成了从技术选型到架构设计的全流程工作。以下为系统性解决方案: 一、核心需求实现路径 跨平台兼容性设计 前端采用渐进增强策略: V…

作者头像 李华
网站建设 2026/6/23 8:56:13

还在为原神养成头秃?这款桌面神器让你少走90%弯路

还在为原神养成头秃?这款桌面神器让你少走90%弯路 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao …

作者头像 李华
网站建设 2026/6/16 17:41:16

Linux系统Wi-Fi 6优化指南:Realtek 8852AE驱动配置与网络性能调优

Linux系统Wi-Fi 6优化指南:Realtek 8852AE驱动配置与网络性能调优 【免费下载链接】rtw89 Driver for Realtek 8852AE, an 802.11ax device 项目地址: https://gitcode.com/gh_mirrors/rt/rtw89 一、核心优势解析 Realtek 8852AE Wi-Fi 6驱动专为Linux系统深…

作者头像 李华
网站建设 2026/6/20 13:33:15

Unreal Engine塔防游戏开发从入门到精通:零基础完整指南

Unreal Engine塔防游戏开发从入门到精通:零基础完整指南 【免费下载链接】UnityTutorials-RTS The code for my series of tutorials on how to make a real-time stategy (RTS) game in the well-know Unity game engine (with C# scripting)! 项目地址: https:…

作者头像 李华
网站建设 2026/6/13 15:48:59

Lcov RPM包跨系统安装故障排查日志

Lcov RPM包跨系统安装故障排查日志 【免费下载链接】lcov LCOV 项目地址: https://gitcode.com/gh_mirrors/lc/lcov 问题现象记录 2023年11月15日,收到用户反馈在Rocky Linux 8.7系统上安装lcov-2.1-1.noarch.rpm时出现兼容性错误。执行dnf install lcov-2.…

作者头像 李华