news 2026/3/22 0:08:22

AES加密存储与大文件分片上传结合的解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AES加密存储与大文件分片上传结合的解决方案

这篇文章介绍了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/3/21 2:02:03

PyTorch-CUDA镜像能否用于电梯智能调度

PyTorch-CUDA镜像能否用于电梯智能调度 在现代高层建筑中,电梯不再只是简单的垂直运输工具——它正逐渐演变为一个需要实时决策、动态响应的复杂系统。每天早晚高峰时,人们挤在大厅等待电梯,而控制系统却仍在用几十年前的“就近响应”逻辑派梯…

作者头像 李华
网站建设 2026/3/21 13:58:11

从GitHub克隆项目后如何激活PyTorch虚拟环境?

从GitHub克隆项目后如何激活PyTorch虚拟环境? 在深度学习项目开发中,你是否曾遇到这样的场景:刚从 GitHub 克隆了一个热门的 PyTorch 项目,满怀期待地运行 python train.py,结果却抛出一连串错误——“No module named…

作者头像 李华
网站建设 2026/3/21 22:32:33

10个AI论文软件推荐,继续教育学生轻松搞定毕业论文!

10个AI论文软件推荐,继续教育学生轻松搞定毕业论文! AI 工具助力论文写作,让学术之路更轻松 在当今信息化时代,AI 技术已经渗透到各行各业,教育领域也不例外。对于继续教育的学生而言,撰写毕业论文是一项…

作者头像 李华
网站建设 2026/3/15 5:53:49

网络安全完全指南:从小白到黑客必学的10大防范技术(建议收藏)

一、引言 在当今数字化的时代,网络已经成为人们生活和工作中不可或缺的一部分。然而,随着网络的普及和应用的广泛,网络安全问题也日益凸显。从个人隐私泄露到企业关键信息被盗,从网络欺诈到大规模的网络攻击,网络安全…

作者头像 李华
网站建设 2026/3/11 14:31:31

通达信天狼操盘 源码 贴图

{}X_1:REF(CLOSE,1); X_2:SMA(MAX(CLOSE-X_1,0),3,1)/SMA(ABS(CLOSE-X_1),3,1)*100; X_3:EMA(CLOSE,3); X_4:EMA(CLOSE,21); 波动回调提示图:MA(CLOSE,10000); STICKLINE(X_4>REF(X_4,1),X_4,X_4,5,1),COLORRED,LINETHICK2; STICKLINE(X_4<REF(X_4,1),X_4,X_4,5,1),COLOR…

作者头像 李华
网站建设 2026/3/12 22:24:39

涉密行业首选!MonkeyCode 离线私有化 AI 编程解决方案

代码安全与效率协同&#xff1a;MonkeyCode企业级AI编程私有化解决方案解析 在AI编程工具广泛应用的当下&#xff0c;代码安全与数据隐私已成为企业研发的核心关切点。MonkeyCode作为长亭科技推出的开源企业级AI编程辅助平台&#xff0c;以“私有化部署为核心、安全管控为支撑…

作者头像 李华