因胸联盟 发表于 2015-1-16 14:25:10

来一篇关于NET的FileUpload控件的利用

以前学了大概半年时间的asp(没有机会做大系统,最多是自己对公司系统做些调整和修改还有一些小程序)。应该说开始接触asp.net是今年元月5号的事。现在很想把公司的系统重新用.net来架构,却不知道如何下手。FileUpload控件显现一个文本框控件和一个扫瞄按钮,利用户能够选择客户端上的文件并将它上载到Web服务器。用户经由过程在控件的文本框中输出当地盘算机上文件的完全路径(比方,C:MyFilesTestFile.txt)来指定要上载的文件。用户也能够经由过程单击“扫瞄”按钮,然后在“选择文件”对话框中定位文件来选择文件。

用户选择要上载的文件后,FileUpload控件不会主动将该文件保留到服务器。您必需显式供应一个控件或机制,利用户能提交指定的文件。比方,能够供应一个按钮,用户单击它便可上载文件。为保留指定文件所写的代码应挪用SaveAs办法,该办法将文件内容保留到服务器上的指定路径。一般,在激发回发到服务器的事务的事务处置办法中挪用SaveAs办法。

在文件上传的过程当中,文件数据作为页面哀求的一部分,上传并缓存到服务器的内存中,然后再写进服务器的物理硬盘中。

有三个方面必要注重:
1.确认是不是包括文件
在挪用SaveAs办法将文件保留到服务器之前,利用HasFile属性来考证FileUpload控件的确包括文件。若HasFile前往true,则挪用SaveAs办法。假如它前往false,则向用户显现动静,唆使控件不包括文件。不要经由过程反省PostedFile属性来断定要上载的文件是不是存在,由于默许情形下该属性包括0字节。因而,即便FileUpload控件为空,PostedFile属性仍前往一个非空值。

2.文件上传巨细限定
默许情形下,上传文件巨细限定为4096KB(4MB)。能够经由过程设置httpRuntime元素的maxRequestLength属性来同意上载更年夜的文件。若要增添全部使用程序所同意的最年夜文件巨细,请设置Web.config文件中的maxRequestLength属性。若要增添指定页所同意的最年夜文件巨细,请设置Web.config中location元素内的maxRequestLength属性。
上载较年夜文件时,用户也大概吸收到以下毛病信息:
aspnet_wp.exe(PID:1520)wasrecycledbecausememoryconsumptionexceeded460MB(60percentofavailableRAM).

以上信息申明,上传文件的巨细不克不及凌驾服务器内存巨细的60%。这里的60%是Web。config文件的默许设置,是<processModel>设置节中的memoryLimit属性默许值。固然能够修正,可是假如上传文件越年夜,乐成概率越小,不倡议利用。

3.上传文件夹的写进权限
使用程序能够经由过程两种体例取得写会见权限。您能够将要保留上载文件的目次的写会见权限显式授与运转使用程序所利用的帐户。您也能够进步为ASP.NET使用程序授与的信托级别。若要使使用程序取得实行目次的写会见权限,必需将AspNetHostingPermission工具授与使用程序并将其信托级别设置为AspNetHostingPermissionLevel.Medium值。进步信托级别可进步使用程序对服务器资本的会见权限。请注重,该办法其实不平安,由于假如怀有歹意的用户把持了使用程序,他(她)也能以更高的信托级别运转使用程序。最好的做法就是在仅具有运转该使用程序所需的最低特权的用户高低文中运转ASP.NET使用程序。

FileUpload控件的经常使用属性:
属性数据范例申明FileBytesbyte[]猎取上传文件的字节数组FileContentStream猎取指定上传文件的Stream工具FileNameString猎取上传文件在客户真个文件称号HasFileBool猎取一个布尔值,用于暗示FileUpload控件是不是已包括一个文件PostedFileHttpPostedFile猎取一个与上传文件相干的HttpPostedFile工具,利用该工具能够猎取上传文件的相干属性
能够经由过程3种办法会见上传文件:
1.经由过程FileBytes属性。该属性将上传文件数据置于字节数组中,遍历该数组,则可以以字节体例懂得上传文件的内容。

2.经由过程FileContent属性。挪用该属性能够取得一个指向上传文件的Stream工具。可使用该属性读取上传文件数据,并利用FileBytes属性显现文件内容。

3.经由过程PostedFile属性。挪用该属性能够取得一个与上传文件相干的HttpPostedFile工具,利用该工具能够取得与上传文件相干的信息。比方,挪用HttpPostedFile工具的ContentLength,能够取得上传文件巨细;挪用HttpPostedFile工具的ContentType属性,能够取得上传文件的范例;挪用HttpPostedFile工具的FileName属性,能够取得上传文件在客户真个完全路径(挪用FileUpload控件的FileName属性,仅能取得文件名)。

演示一个最基础的文件上传示例:
Default.aspx
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>示例8-3</title>
<linkid="InstanceStyle"href="StyleSheet.css"type="text/css"rel="stylesheet"/>
</head>
<body>
<formid="Form1"runat="server">
<div>
<fieldsetstyle="width:290px">
<legendclass="mainTitle">FileUpload控件典范使用</legend>
<br/>
<asp:FileUploadID="FileUpload1"runat="server"/>
<asp:ButtonID="BtnUpload"runat="server"Text="上传"/>
<hr/>
<asp:LabelID="LabMessage1"runat="server"ForeColor="red"/><br/>
<asp:LabelID="LabMessage2"runat="server"/>
</fieldset>
</div>
</form>
</body>
</html>

Default.aspx.cs
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;

publicpartialclass_Default:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
}
protectedvoidBtnUpload_Click(objectsender,EventArgse)
{
boolfileOK=false;
stringpath=Server.MapPath("~/Temp/");
if(FileUpload1.HasFile)
{
StringfileExtension=System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
String[]allowedExtensions={".gif",".png",".bmp",".jpg"};
for(inti=0;i<allowedExtensions.Length;i++)
{
if(fileExtension==allowedExtensions)
{
fileOK=true;
}
}
}
if(fileOK)
{
try
{
FileUpload1.SaveAs(path+FileUpload1.FileName);
LabMessage1.Text="文件上传乐成.";
LabMessage2.Text="<b>原文件路径:</b>"+FileUpload1.PostedFile.FileName+"<br/>"+
"<b>文件巨细:</b>"+FileUpload1.PostedFile.ContentLength+"字节<br/>"+
"<b>文件范例:</b>"+FileUpload1.PostedFile.ContentType+"<br/>";
}
catch(Exceptionex)
{
LabMessage1.Text="文件上传不乐成.";
}
}
else
{
LabMessage1.Text="只可以上传图片文件.";
}
}
}
我实在想不明白java的机制,为什么非要那么蛋疼,在同一个平台下重复编译。

小女巫 发表于 2015-1-18 14:15:53

主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。

透明 发表于 2015-1-26 23:26:14

Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。

飘灵儿 发表于 2015-2-5 02:25:46

在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的

第二个灵魂 发表于 2015-2-11 03:03:02

可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。

乐观 发表于 2015-3-1 20:22:25

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

小魔女 发表于 2015-3-10 23:56:48

碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。

冷月葬花魂 发表于 2015-3-17 16:33:01

主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。

只想知道 发表于 2015-3-24 14:15:57

业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
页: [1]
查看完整版本: 来一篇关于NET的FileUpload控件的利用