|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
以前学了大概半年时间的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的机制,为什么非要那么蛋疼,在同一个平台下重复编译。 |
|