news 2026/4/18 3:31:14

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/4/16 12:06:14

7款AI论文工具实测:知网查重一把过,无AIGC痕迹轻松搞定

还在为开题、写作、降重、查AIGC而彻夜难眠?告别焦虑,你距离完美论文,只差一个正确的工具。 当你看到这篇文章时,恭喜你,你的论文“渡劫”之路已经看到了曙光。你是否也经历过这样的场景:对着空白的Word文档…

作者头像 李华
网站建设 2026/4/18 2:10:02

一线乾坤 通达信源码

{}DIR1:ABS(CLOSE-REF(CLOSE,5)); VIR1:SUM(ABS(CLOSE-REF(CLOSE,1)),5); ER1:DIR1/VIR1; CS1:ER1*(0.8-2/8)2/8; CQ1:CS1*CS1; DIR2:ABS(CLOSE-REF(CLOSE,10)); VIR2:SUM(ABS(CLOSE-REF(CLOSE,1)),10); ER2:DIR2/VIR2; CS2:ER2*(0.8-2/24)2/24; CQ2:CS2*CS2;{分析家} AMA2:EMA…

作者头像 李华
网站建设 2026/4/17 19:50:01

PyTorch-CUDA-v2.7镜像在渔业资源评估中的尝试

PyTorch-CUDA-v2.7镜像在渔业资源评估中的尝试 在海洋生态监测日益数据化的今天,渔业资源评估正面临一场由AI驱动的范式变革。过去依赖人工调查和统计模型的方式,已难以应对卫星遥感、声呐扫描与渔船日志等海量异构数据的融合分析需求。尤其是在全球气候…

作者头像 李华
网站建设 2026/4/11 0:25:28

安全左移实战指南:测试工程师的CI/CD安全测试整合策略

DevSecOps的变革力量 在快速迭代的软件开发时代,安全漏洞已成为企业面临的最大风险之一。传统安全测试往往滞后于开发周期,导致修复成本高昂且响应迟钝。DevSecOps——作为DevOps的演进——通过将安全(Security)左移(…

作者头像 李华
网站建设 2026/3/26 19:07:58

PyTorch-CUDA镜像对电商商品推荐的影响

PyTorch-CUDA镜像对电商商品推荐的影响 在如今的电商平台中,用户面对的是动辄上亿级别的商品库,而如何从海量信息中精准推送“你可能喜欢”的内容,已经成为决定转化率和用户体验的核心战场。背后支撑这一切的,是一套日益复杂的深…

作者头像 李华