news 2026/5/30 17:16:40

机械制造行业如何优化大文件上传下载的解决方案总结?

作者头像

张小明

前端开发工程师

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/5/29 0:53:50

FaceSeeker 慧眼寻人 v1.6 本地 AI 批量人脸识别工具

FaceSeeker 慧眼寻人 v1.6 是一款本地 AI 驱动的批量人脸识别工具,核心聚焦照片批量查找需求,凭借高准确率识别与多核高速处理能力,适配日常图片整理、特定人物筛选等场景,为用户提供安全高效的人脸检索解决方案,无需依…

作者头像 李华
网站建设 2026/5/23 7:19:23

Canvas表格绘制教程:网格线、文本填充与优化技巧

在数据可视化需求日益增长的今天,HTML5 Canvas 提供了强大的图形绘制能力。对于需要高度自定义的表格而言,直接使用 Canvas 绘制成为一种灵活但具有挑战性的选择。它不像操作 DOM 那样便捷,需要开发者亲手控制每一个像素的布局与样式&#xf…

作者头像 李华
网站建设 2026/5/22 22:24:30

基于保证金机制与波动率模型的阶段性回测::CME“六度加保证金”触发白银高波动的结构性回撤解析

摘要:本文基于交易所保证金调整数据、历史行情样本及波动率结构特征,结合规则变化对杠杆资金约束的影响机制,从量化分析与历史对照角度,对近期白银价格剧烈回撤现象进行阶段性梳理,并对相关市场结构特征进行客观分析。…

作者头像 李华
网站建设 2026/5/29 5:34:38

基于深度学习YOLOv11的安检x光危险物识别检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 随着公共安全需求的日益增长,安检X光图像中的危险物品检测技术成为研究热点。本文基于YOLOv11深度学习算法,构建了一套高效准确的X光危险物品检测系统,支持18类常见危险物品(如刀具、枪支、易燃物品等)的…

作者头像 李华
网站建设 2026/5/29 3:37:45

哪些因素在损害孩子们的视力,做调节训练有用吗?

‍  是不是每次孩子写作业时,你都会忍不住提醒“把头抬起来”?是不是体检报告上,孩子的视力数值一次比一次低,让你满心焦虑?如今,我国儿童青少年近视率依然徘徊在50%左右,近视低龄化的趋势也未…

作者头像 李华
网站建设 2026/5/25 13:25:15

【小程序毕设全套源码+文档】基于Android的在线招聘平台的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华