当前位置: 首页 > news >正文

FileUpload控件

    FileUpload 控件显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器。用户通过在控件的文本框中输入本地计算机上文件的完整路径(例如, C:\MyFiles\TestFile.txt)来指定要上载的文件。用户也可以通过单击“浏览”按钮,然后在“选择文件”对话框中定位文件来选择文件。
    用户选择要上载的文件后, FileUpload 控件不会自动将该文件保存到服务器。您必须显式提供一个控件或机制,使用户能提交指定的文件。例如,可以提供一个按钮,用户单击它即可上载文件。为保存指定文件所写的代码应调用 SaveAs 方法,该方法将文件内容保存到服务器上的指定路径。通常,在引发回发到服务器的事件的事件处理方法中调用 SaveAs 方法。
    在文件上传的过程中,文件数据作为页面请求的一部分,上传并缓存到服务器的内存中,然后再写入服务器的物理硬盘中。
    有三个方面需要 注意
    1.确认是否包含文件
    在调用 SaveAs 方法将文件保存到服务器之前,使用 HasFile 属性来验证 FileUpload 控件确实包含文件。若 HasFile 返回 true,则调用 SaveAs 方法。如果它返回 false,则向用户显示消息,指示控件不包含文件。不要通过检查 PostedFile 属性来确定要上载的文件是否存在,因为默认情况下该属性包含 0 字节。因此,即使 FileUpload 控件为空, PostedFile 属性仍返回一个非空值。
    2.文件上传大小限制
    默认情况下,上传文件大小限制为 4096 KB (4 MB)。可以通过设置 httpRuntime 元素maxRequestLength 属性来允许上载更大的文件。若要增加整个应用程序所允许的最大文件大小,请设置 Web.config 文件中的 maxRequestLength 属性。若要增加指定页所允许的最大文件大小,请设置 Web.config 中 location 元素内的 maxRequestLength 属性。
    上载较大文件时,用户也可能接收到以下错误信息:
    aspnet_wp.exe (PID: 1520) 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 应用程序。
   
    FileUpload控件的常用属性:

属性

数据类型

说明

FileBytes

byte[]

获取上传文件的字节数组

FileContent

Stream

获取指定上传文件的Stream对象

FileName

String

获取上传文件在客户端的文件名称

HasFile

Bool

获取一个布尔值,用于表示FileUpload控件是否已经包含一个文件

PostedFile

HttpPostedFile

获取一个与上传文件相关的HttpPostedFile对象,使用该对象可以获取上传文件的相关属性

 

    可以通过3种方法访问上传文件:
1.通过FileBytes属性。该属性将上传文件数据置于字节数组中,遍历该数组,则能够以字节方式了解上传文件的内容。
2.通过FileContent属性。调用该属性可以获得一个指向上传文件的Stream对象。可以使用该属性读取上传文件数据,并使用FileBytes属性显示文件内容。
3. 通过PostedFile属性。调用该属性可以获得一个与上传文件相关的HttpPostedFile对象,使用该对象可以获得与上传文件相关的信息。例 如,调用HttpPostedFile对象的ContentLength,可以获得上传文件大小;调用HttpPostedFile对象的 ContentType属性,可以获得上传文件的类型;调用HttpPostedFile对象的FileName属性,可以获得上传文件在客户端的完整路 径(调用FileUpload控件的FileName属性,仅能获得文件名)。
    
    Show一个最基本的文件上传示例:

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>示例8-3</title>
    
<link id="InstanceStyle" href="StyleSheet.css" type="text/css" rel="stylesheet" />
</head>
<body>
    
<form id="Form1" runat="server">
        
<div>
            
<fieldset style="width: 290px">
                
<legend class="mainTitle">FileUpload控件典型应用</legend>
                
<br />
                
<asp:FileUpload ID="FileUpload1" runat="server" />
                
<asp:Button ID="BtnUpload" runat="server" Text="上传" OnClick="BtnUpload_Click" />
                
<hr />
                
<asp:Label ID="LabMessage1" runat="server" ForeColor="red" /><br />
                
<asp:Label ID="LabMessage2" runat="server" />
            
</fieldset>
        
</div>
    
</form>
</body>
</html>

Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
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 _Default : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
    }

    
protected void BtnUpload_Click(object sender, EventArgs e)
    
{
        
bool fileOK = false;
        
string path = Server.MapPath("~/Temp/");
        
if (FileUpload1.HasFile)
        
{
            String fileExtension 
= System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
            String[] allowedExtensions 
= ".gif"".png"".bmp"".jpg" };
            
for (int i = 0; i < allowedExtensions.Length; i++)
            
{
                
if (fileExtension == allowedExtensions[i])
                
{
                    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 (Exception ex)
            
{
                LabMessage1.Text 
= "文件上传不成功.";
            }

        }

        
else
        
{
            LabMessage1.Text 
= "只能够上传图片文件.";
        }

    }

}

通过对以上的示例进行分析,我们还可以用验证控件来实现对文件类型的验证
Show一下正则表达式:
验证控件
<ASP:RegularExpressionValidator 
 id
="RegularExpressionValidator1" runat="server" 
 ErrorMessage
="Only mp3, m3u or mpeg files are allowed!" 
 ValidationExpression
="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))
    +(.mp3|.MP3|.mpeg|.MPEG|.m3u|.M3U)$" 
 ControlToValidate="FileUpload1"></ASP:RegularExpressionValidator>
<br />
<ASP:RequiredFieldValidator 
 id
="RequiredFieldValidator1" runat="server" 
 ErrorMessage
="This is a required field!" 
 ControlToValidate
="FileUpload1"></ASP:RequiredFieldValidator>

转载于:https://www.cnblogs.com/rocky99261/archive/2008/05/06/1185058.html

相关文章:

  • 如何编写最佳的Dockerfile
  • XP蓝屏代码及解决方法
  • lvs-nat的搭建实验
  • 众志成城,我的所见所感
  • 前端学习感想
  • 保持青春必吃的三种蛋
  • css样式大全(整理版)
  • 开放 mm1接口发送彩信(也就是GPRS modem发送彩信) 代码 c#版
  • ActiveMQ 与 Spring
  • 菜鸟学SQL注入 --- 一个简单的教学案例
  • 块级元素和内联元素的区别与转换
  • SQL Server 2005 触发器应用
  • hadoop-hdfs文件系统的安装与部署
  • 第四篇:数据预处理(一) - 缺失值处理
  • HDU 2586 How far away ?(LCA模板 近期公共祖先啊)
  • Apache的基本使用
  • export和import的用法总结
  • express.js的介绍及使用
  • JavaScript-Array类型
  • Linux gpio口使用方法
  • Objective-C 中关联引用的概念
  • 初识 beanstalkd
  • 关于springcloud Gateway中的限流
  • 前嗅ForeSpider中数据浏览界面介绍
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 在electron中实现跨域请求,无需更改服务器端设置
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #pragma预处理命令
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $jQuery 重写Alert样式方法
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)详解PHP处理密码的几种方式
  • (转载)hibernate缓存
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .gitignore文件---让git自动忽略指定文件
  • .htaccess配置常用技巧
  • .md即markdown文件的基本常用编写语法
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net专家(张羿专栏)
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • /proc/stat文件详解(翻译)
  • @Autowired和@Resource装配
  • @Transactional 竟也能解决分布式事务?
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [Dxperience.8.*]报表预览控件PrintControl设置
  • [k8s系列]:kubernetes·概念入门