news 2026/11/3 10:21:02

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

作者头像

张小明

前端开发工程师

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/11/3 1:53:30

水稻叶病害数据集(只能用于图像分类,没有打yolo标签)

如果需要yolo标签的,可以关注这篇:水稻叶病害数据集(目标检测,yolo使用)_深度学习的奋斗者的博客-CSDN博客 1.数据集介绍: 自然环境下,4种水稻叶片病虫害数据集 Bacterial blight(白…

作者头像 李华
网站建设 2026/11/3 1:53:29

番茄叶病害数据集

每一个文件夹里装有一类病害叶子的照片,一共10种类别,每种类别下有1100张照片从第一类到第十类分别如下图所示

作者头像 李华
网站建设 2026/11/3 1:53:32

牛客题解-小红的区间查询

链接&#xff1a;https://ac.nowcoder.com/acm/contest/128186/A 来源&#xff1a;牛客网 题目描述 \hspace{15pt}小红拿到了两个整数 a,b(a<b)a,b\left(a < b\right)a,b(a<b)。现在她想知道 [l,r]\left[l,r \right][l,r] 内有多少元素 xxx 满足 x−ax - ax−a 是…

作者头像 李华
网站建设 2026/11/3 1:53:32

安捷伦8720ES 8722ES E8632B网络分析仪

安捷伦8720ES&#xff08;20GHz&#xff09;是一款矢量网络分析仪&#xff0c;主要用于射频和微波元件的评测。其核心功能包括S参数测试、高动态范围测量以及多种校准选项&#xff0c;适用于无线通信和电子设计应用‌。 主要功能与使用方法 ‌频率范围‌&#xff1a;覆盖50MHz至…

作者头像 李华
网站建设 2026/11/3 8:17:53

【小程序毕设源码分享】基于springboot+Android的个人财务系统的设计与实现(程序+文档+代码讲解+一条龙定制)

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

作者头像 李华