asp.net中fileupload上传文件的方法
asp.net中fileupload上传文件的方法
asp.net中fileupload上传文件的方法FileUpload 控件显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器。用户通过在控件的文本框中输入本地计算机上文件的完整路径(例如,C:\MyFiles\test。txt)来指定要上载的文件。用户也可以通过单击“浏览”按钮,然后在“选择文件”对话框中定位文件来选择文件。
用户选择要上载的文件后,FileUpload 控件不会自动将该文件保存到服务器。您必须显式提供一个控件或机制,使用户能提交指定的文件。例如,可以提供一个按钮,用户单击它即可上载文件。为保存指定文件所写的代码应调用 SaveAs 方法,该方法将文件内容保存到服务器上的指定路径。通常,在引发回发到服务器的事件的事件处理方法中调用 SaveAs 方法。
在文件上传的过程中,文件数据作为页面请求的一部分,上传并缓存到服务器的内存中,然后再写入服务器的物理硬盘中。
FileUpload控件常用的几个公开的只读属性
名 称 | 返回类型 | 说 明 |
FileContent | Stream | 返回一个指向上传文件的Stream流对象 |
FileName | string | 返回上传文件在客户端的文件名称,不包含路径信息 |
HasFile | Boolean | 获取一个布尔值,用于表示FileUpload控件是否已经包含一个文件 |
PostedFile | HttpPostedFile | 获取一个与上传文件相关的HttpPostedFile对象,使用该对象可以获取上传文件的相关属性。下表列出了它所公开的只读属性 |
HttpPostedFile属性
名 称 | 返回类型 | 说 明 |
ContentLength | integer | 返回上传文件的按字节表示的文件大小 |
ContentType | string | 返回上传文件的MIME内容类型 |
FileName | string | 返回文件在客户端的完全限定名 |
InputStream | Stream | 返回一个指向上传文件的流对象 |
有三个方面需要注意:
1.确认是否包含文件
在调用 SaveAs 方法将文件保存到服务器之前,使用 HasFile 属性来验证 FileUpload 控件确实包含文件。若 HasFile 返回 true,则调用 SaveAs 方法。如果它返回 false,则向用户显示消息,指示控件不包含文件。不要通过检查PostedFile 属性来确定要上载的文件是否存在,因为默认情况下该属性包含 0 字节。因此,即使 FileUpload 控件为空,PostedFile 属性仍返回一个非空值。
2.文件上传大小限制
默认情况下,上传文件大小限制为 4096 KB (4 MB)。可以通过设置 httpRuntime 元素的 maxRequestLength 属性来允许上载更大的文件。
相关节点如下:
〈system.web>
〈httpRuntime maxRequestLength="40690" executionTimeout="6000" />
〈/system.web>
maxRequestLength表示可上传文件的最大值,executionTimeout表示ASP.NET关闭前允许发生的上载秒数。
若要增加整个应用程序所允许的最大文件大小,请设置 Web.config 文件中的 maxRequestLength 属性。若要增加指定页所允许的最大文件大小,请设置 Web.config 中 location 元素内的 maxRequestLength 属性。
上载较大文件时,用户也可能接收到以下错误信息:
was recycled because memory consumption exceeded 460 MB (60 percent of available RAM).
以上信息说明,上传文件的大小不能超过服务器内存大小的60%。这里的60%是Web。config文件的默认配置,是<processModel>配置节中的 memoryLimit 属性默认值。虽然可以修改,但是如果上传文件越大,成功几率越小,不建议使用。
3.上传文件夹的写入权限
应用程序可以通过两种方式获得写访问权限。您可以将要保存上载文件的目录的写访问权限显式授予运行应用程序所使用的帐户。您也可以提高为 ASP.NET 应用程序授予的信任级别。若要使应用程序获得执行目录的写访问权限,必须将 AspNetHostingPermission 对象授予应用程序并将其信任级别设置为 AspNetHostingPermissionLevel.Medium 值。提高信任级别可提高应用程序对服务器资源的访问权限。请注意,该方法并不安全,因为如果怀有恶意的用户控制了应用程序,他(她)也能以更高的信任级别运行应用程序。最好的做法就是在仅具有运行该应用程序所需的最低特权的用户上下文中运行 ASP.NET 应用程序。
可以通过3种方法访问上传文件:
1.通过FileBytes属性。该属性将上传文件数据置于字节数组中,遍历该数组,则能够以字节方式了解上传文件的内容。
2.通过FileContent属性。调用该属性可以获得一个指向上传文件的Stream对象。可以使用该属性读取上传文件数据,并使用FileBytes属性显示文件内容。
3.通过PostedFile属性。调用该属性可以获得一个与上传文件相关的HttpPostedFile对象,使用该对象可以获得与上传文件相关的信息。例如,调用HttpPostedFile对象的ContentLength,可以获得上传文件大小;调用HttpPostedFile对象ContentType属性,可以获得上传文件的类型;调用HttpPostedFile对象的FileName属性,可以获得上传文件在客户端的完整路径(调用FileUpload控件的FileName属性,仅能获得文件名)。
FileUpload控件上传简单实例:
//前台就随便拖一个FileUpload控件和一个button控件
<asp:FileUpload ID="FileUpload1" runat="server" /><br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
//后台
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Manage_News_upload : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string fileExrensio = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();//ToLower转化为小写
string FileType = FileUpload1.PostedFile.ContentType;
string UploadURL = Server.MapPath("~/upload/");//上传的目录
if (FileType == "image/bmp" || FileType == "image/gif" || FileType == "image/jpeg" || FileType == "image/jpg" || FileType == "image/png")//判断文件类型
{
try
{
if (!System.IO.Directory.Exists(UploadURL))//判断文件夹是否已经存在
{
System.IO.Directory.CreateDirectory(UploadURL);//创建文件夹
}
FileUpload1.PostedFile.SaveAs(UploadURL + FileUpload1.FileName);
}
catch
{
Response .Write ("失败");
}
}
else
{
Response.Write("格式错误");
}
}
else
Response.Write("请选择文件");
}
}
上面的实例还有很多属性没有用到,大家可以根据需要自己添加属性判断,写出满足自己项目的上传方法.
一次上传多个文件
要一次上传多个文件,我们可以像传单个文件那样对每个文件单独进行处理,除此之外,我们还可以使用HttpFileCollection类捕获从Request对象发送来的所有文件,然后再单独对每个文件进行处理.
实例
protected void Button1_Click(object sender, EventArgs e)
{
string filepath = Server.MapPath("upload") + "\\\\";
HttpFileCollection uploadFiles = Request.Files;
for (int i = 0; i 〈 uploadFiles.Count; i++)
{
HttpPostedFile postedFile = uploadFiles[i];
try
{
if (postedFile.ContentLength > 0)
{
Label1.Text += "文件 #" + (i + 1) + ":" + System.IO.Path.GetFileName(postedFile.FileName) + "〈br/>";
postedFile.SaveAs(filepath + System.IO.Path.GetFileName(postedFile.FileName));
}
}
catch (Exception Ex)
{
Label1.Text += "发生错误: " + Ex.Message;
}
}
}
- ASP.NET中Partial Class部分类
- ASP.NET将WORD、PDF、PPT转为图片
- windowsserver2008部署php项目(win2008 r2 服务器环境配置FTP/ASP/ASP.Net/PHP)
- ASP.NET Web API中参数的传递
- asp.net小数点四舍五入
- asp.net中split的用法
- ASP.NET常用的代码收集
- ASP.NET中获取匿名对象的属性值
- ASP.NET写文件的方法
- ASP.NET中application对象的用法
- Asp.Net中索引器的用法
- ASP.NET cache缓存的用法
- ASP.NET文件打包压缩下载
- asp.net把word文档转换成pdf
- ASP.NET中Web API的简单实例
- asp.net操作cookie
- 三杨 共辅四朝帝王,构建明帝国内阁行政圈(三杨共辅四朝帝王)
- 红色文化进国企(红色文化进国企)
- 车友的选择| 轮毂该如何选(车友的选择轮毂该如何选)
- 秦海璐炫耀和王新军热恋蜜事,不料对方吐槽她吃饱后肚子撅老高(秦海璐炫耀和王新军热恋蜜事)
- 秦海璐一袭旗袍惹人倾心,将高级与淡雅展现的游刃有余(秦海璐一袭旗袍惹人倾心)
- 门外之见 海蛎子味 的表演,能走多远(门外之见海蛎子味)
热门推荐
- windows性能计数器与SQL Server Profiler 组合分析性能
- dedecms5.7后台内链如何制作(DEDECMS教程之loop循环标签的使用详解)
- extjs xtype的使用
- iframe跨域获取标签(iframe跨域的几种常用方法)
- mysql数据表的创建与管理(MySQL数据操作-DML语句的使用)
- easyui combogrid分页
- dedecms怎么更换模板(DEDECMS解析模板之灵活应用视图类)
- dedecms调用内容(DEDECMS文章列表页调用tag的修改方法)
- idea发布项目在tomcat哪个目录下(idea发布web项目后Tomcat服务器找不到该项目的问题及解决方法)
- php的数组是如何实现的(PHP中遍历数组的三种常用方法实例分析)