[翻译]运用HtmlInputFile服务器控件上传多个文件

简介:
由于发现以前写的文章都是乱来的,想到什么就写什么?看到别人的文章何等地规范,又通俗易懂,条理又很强,于是乎我就想了一个方法,来训练一下自己的写作方式,通过翻译一些老外的文章来玩玩,可能不断格式化自己可以写出格式不错的文章来,费话不用多说的,今天来翻译一篇比较简单的文章来做为这个计划的开始,OK!运用HtmlInputFile服务器控件上传多个文件[Upload multiple files using HtmlInputFile control]。

  Published: 05 Feb 2006
  By: 
Haissam Abdul Malak
  
  在这篇文章中,我将讲述如何应用几个文件上传控件。本文将通过三个HtmlInputFile服务器控件同时上传三个文件的例子来讲述。

摘要:

  当微软发布ASP.NET 1.0时就可以将本地文件上传到WEB服务器上,这通过HTML input file服务器控件就能够实现这样的操作,Html Input File服务器控件可以允许用户浏览本地文件。

  现在让我们添加三个Html input file服务器控件,使得用户能够同时选取三个文件,并添加一个按扭Batch Upload,用于提交事件,使得三个文件上传到服务端。同时我们将过滤上传的文件,分别放在两类中:

    1.图片

     2.其它

  我们将创建两个文件夹放于程序的根目录中,第一个命名为“Images”用于放置(JPG,GIF)文件,第二个为“Others”用于保存除以上两种文件以外有文件。

HTML代码

  让我们来看一下,加入了三个HTML INPUT File服务器控件的HTML代码,代码如下:

 1 ExpandedBlockStart.gif <% @ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" 
 2ExpandedBlockEnd.gifInherits="MultipleUpload.WebForm1" 
%>
 3 None.gif <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"  >
 4 None.gif < HTML >
 5 None.gif   < HEAD >
 6 None.gif     < title > WebForm1 </ title >
 7 None.gif     < meta  name ="GENERATOR"  Content ="Microsoft Visual Studio .NET 
 8 None.gif
 9 None.gif7.1" >
10 None.gif     < meta  name ="CODE_LANGUAGE"  Content ="C#" >
11 None.gif     < meta  name ="vs_defaultClientScript"  content ="JavaScript" >
12 None.gif     < meta  name ="vs_targetSchema"  
13 None.gif    content ="http://schemas.microsoft.com/intellisense/ie5" >
14 None.gif   </ HEAD >
15 None.gif   < body  MS_POSITIONING ="GridLayout" >
16 None.gif     < form  id ="Form1"  method ="post"  runat ="server" >
17 None.gif       < asp:Button  id ="Button1"  style ="Z-INDEX: 101; LEFT: 280px; 
18 None.gif        POSITION: absolute; TOP: 101px"  runat ="server"  Text ="Batch Upload"   />
19 None.gif        < div  id ="Div1"  runat ="server"  style ="Z-INDEX:102;LEFT:165px;WIDTH:1026px;
20 None.gif       POSITION:absolute;TOP:7px;HEIGHT:19px" >
21 None.gif           < INPUT  id ="FileUpload1"  style ="WIDTH: 389px; HEIGHT: 22px"  
22 None.gif            type ="file"  size ="45"  runat ="server" >
23 None.gif           < asp:Label  id ="Label1"  runat ="server"  Width ="598px"  
24 None.gif            ForeColor ="Red"   />
25 None.gif        </ div >
26 None.gif        < div  id ="Div2"  runat ="server"  style ="Z-INDEX:103;LEFT:166px;WIDTH:1026px;
27 None.gif       POSITION:absolute;TOP:38px;HEIGHT:19px" >
28 None.gif           < INPUT  style ="WIDTH: 389px; HEIGHT: 22px"  type ="file"  
29 None.gif          size ="45"  runat ="server"  id ="FileUpload2" >
30 None.gif           < asp:Label  id ="Label2"  runat ="server"  Width ="357px"  
31 None.gif          ForeColor ="Red"   />
32 None.gif         </ div >
33 None.gif        < div  id ="Div3"  runat ="server"  style ="Z-INDEX:104;LEFT:166px;WIDTH:1026px;
34 None.gif       POSITION:absolute;TOP:68px;HEIGHT:19px" >
35 None.gif           < INPUT  style ="WIDTH: 389px; HEIGHT: 22px"  type ="file"  
36 None.gif          size ="45"  runat ="server"  id ="FileUpload3" >
37 None.gif           < asp:Label  id ="Label3"  runat ="server"  Width ="361px"  
38 None.gif          ForeColor ="Red"   />
39 None.gif        </ div >
40 None.gif     </ form >
41 None.gif   </ body >
42 None.gif </ HTML >
43 None.gif

  以下图片显示以上代码解析后的浏览器显示的样式:

  
Code Behind

  为了上传文件我们需要用到以下几个类:

    1.HttpFileCollection

    2.HttpPostedFile

    3.Request.Files

    4.System.IO.Path

  HttpFileCollection类包含了一系列的HttpPostedFile,为上传服务器文件的一个集合,为了取得用户所选的文件我们要运用到Request.Files,它将返回一个文件集合保存于HttpFileCollection对象中。运用System.IO.Path来判断文件的扩展名以及文件名,我们将通过扩展名来将文件分成两类。

 1 None.gif HttpFileCollection uploadFilCol  =  Request.Files;
 2 None.gif for ( int  i = 0 ;i < uploadFilCol.Count;i ++ )
 3 ExpandedBlockStart.gif {
 4InBlock.gif  HttpPostedFile file = uploadFilCol[i];
 5InBlock.gif  string fileExt = Path.GetExtension(file.FileName).ToLower();
 6InBlock.gif  string fileName = Path.GetFileName(file.FileName);
 7InBlock.gif  if(fileName != string.Empty)
 8ExpandedSubBlockStart.gif  {
 9InBlock.gif    try
10ExpandedSubBlockStart.gif    {
11InBlock.gif      if(fileExt == ".jpg" || fileExt == ".gif")
12ExpandedSubBlockStart.gif      {
13InBlock.gif        file.SaveAs(Server.MapPath("./Images/"+ fileName);
14ExpandedSubBlockEnd.gif      }

15InBlock.gif      else
16ExpandedSubBlockStart.gif      {
17InBlock.gif        file.SaveAs(Server.MapPath("./Others/"+ fileName);
18ExpandedSubBlockEnd.gif      }

19ExpandedSubBlockEnd.gif    }

20InBlock.gif    catch(Exception ex)
21ExpandedSubBlockStart.gif    {
22InBlock.gif      throw ex;
23ExpandedSubBlockEnd.gif    }

24ExpandedSubBlockEnd.gif  }

25ExpandedBlockEnd.gif}

   你可能发现我们通过Foreach从HttpFileCollection集合中取得HttpPostFile对象,将扩展名保存在fileExt变量中,将文件名保存在fileName变量中。然后我们判断它是个图片文件,通过HttpPostFile.SaveAs()方法来将上传的文件保存在“Images”文件夹下,将其它文件保存在还有一个文件夹“Others”下。

  下一步我们将创建一个方法ShowMessages()用来显示上传的状态:

 
 1 None.gif private   void  ShowMessage( string  message,  int  fileUploadPos )
 2 ExpandedBlockStart.gif {
 3InBlock.gif  if(fileUploadPos ==0)
 4ExpandedSubBlockStart.gif  {
 5InBlock.gif    Label1.Text = message;
 6ExpandedSubBlockEnd.gif  }

 7InBlock.gif  else
 8ExpandedSubBlockStart.gif  {
 9InBlock.gif    if(fileUploadPos ==1)
10ExpandedSubBlockStart.gif    {
11InBlock.gif      Label2.Text = message;
12ExpandedSubBlockEnd.gif    }

13InBlock.gif    else
14ExpandedSubBlockStart.gif    {
15InBlock.gif      Label3.Text = message;
16ExpandedSubBlockEnd.gif    }

17ExpandedSubBlockEnd.gif  }

18ExpandedBlockEnd.gif}

   ShowMessage方法共有两个参数,第一个参数是用于显示的字符串,第个个参数是HttpFileCollection的集合索引。

  这个方法将用于显示上传各个文件的状态作息,以及判断是否返回一个错误信息,下面的截图显示上传成功后的状态信息:

完整代码:
 1 None.gif HttpFileCollection uploadFilCol  =  Request.Files;
 2 None.gif for ( int  i = 0 ;i < uploadFilCol.Count;i ++ )
 3 ExpandedBlockStart.gif {
 4InBlock.gif  HttpPostedFile file = uploadFilCol[i];
 5InBlock.gif  string fileExt = Path.GetExtension(file.FileName).ToLower();
 6InBlock.gif  string fileName = Path.GetFileName(file.FileName);
 7InBlock.gif  if(fileName != string.Empty)
 8ExpandedSubBlockStart.gif  {
 9InBlock.gif    try
10ExpandedSubBlockStart.gif    {
11InBlock.gif      if(fileExt == ".jpg" || fileExt == ".gif")
12ExpandedSubBlockStart.gif      {
13InBlock.gif        file.SaveAs(Server.MapPath("./Images/"+ fileName);
14InBlock.gif        this.ShowMessage(" " + fileName + " Successfully Uploaded",i);
15ExpandedSubBlockEnd.gif      }

16InBlock.gif      else
17ExpandedSubBlockStart.gif      {
18InBlock.gif        file.SaveAs(Server.MapPath("./Others/"+ fileName);
19InBlock.gif        this.ShowMessage(" " + fileName + " Successfully Uploaded",i);
20ExpandedSubBlockEnd.gif      }

21ExpandedSubBlockEnd.gif    }

22InBlock.gif    catch(Exception ex)
23ExpandedSubBlockStart.gif    {
24InBlock.gif      this.ShowMessage(" " + ex.Message, i);
25ExpandedSubBlockEnd.gif    }

26ExpandedSubBlockEnd.gif  }

27ExpandedBlockEnd.gif}

  为了能够正常的运行,有两个要点需要我们注意:

    1.如果你需要上传的文件超过4MB就需要修改配制文件Web.config中的<httpRuntime>节点的maxRequestLength属性的值,请注意单位为KB。

    2.必需给ASPNET用户帐户能够上传文件到刚创建的两个文件夹的权限。

总结:

  在这篇文章中,你可以看到HTML file服务器控件的强大之处,将代码加入到你的应用程序中就可以让用户同时上传多个文件到Web服务器中。

本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/03/07/translate_upload_files_using_htmlfileinput.html,如需转载请自行联系原作者

相关文章
|
2月前
|
网络协议
​LabVIEW从另一个VI或通过VI服务器访问正在运行的可执行文件
​LabVIEW从另一个VI或通过VI服务器访问正在运行的可执行文件
27 0
|
2月前
|
存储 SQL 数据挖掘
服务器数据恢复—误删除VMware虚拟机vmdk文件的数据恢复案例
服务器数据恢复环境: 某大厂PS4000服务器,服务器上部署VMware ESXi虚拟化平台。 服务器故障: 机房断电,重启后服务器中的某台虚拟机不能正常启动。管理员查看虚拟机配置文件,发现无法启动的虚拟机的配置文件除了磁盘文件以外其他配置文件全部丢失,xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件还存在。联系VMware原厂工程师进行诊断,VMware原厂工程师尝试新建一个虚拟机,但发现存储空间不足,于是将故障虚拟机下的xxx-flat.vmdk磁盘文件删除了。VMware工程师重新建了一个虚拟机,分配了固定大小的虚拟磁盘,为虚拟机安装了Window
服务器数据恢复—误删除VMware虚拟机vmdk文件的数据恢复案例
|
22天前
|
数据安全/隐私保护
xshell通过堡垒机连接服务器和winscp 通过堡垒机传输文件
【7 月更文挑战第 3 天】xshell通过堡垒机连接服务器和winscp 通过堡垒机传输文件
|
23天前
|
JavaScript API
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
|
1月前
|
数据安全/隐私保护
|
2月前
|
Linux 网络安全
linux/服务器使用scp将一个服务器文件转移到另一个服务器上
linux/服务器使用scp将一个服务器文件转移到另一个服务器上
388 3
|
2月前
|
Windows
LabVIEW中ActiveX控件、ActiveX服务器和类型库注册
LabVIEW中ActiveX控件、ActiveX服务器和类型库注册
62 4
|
2月前
|
Apache 项目管理 数据安全/隐私保护
Windows安装TortoiseSVN客户端结合Cpolar实现公网提交文件到本地服务器
Windows安装TortoiseSVN客户端结合Cpolar实现公网提交文件到本地服务器
|
2月前
|
安全 Linux 网络安全
Windows搭建Emby媒体库服务器,无公网IP远程访问本地影音文件
Windows搭建Emby媒体库服务器,无公网IP远程访问本地影音文件
55 0
|
2月前
|
Java
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
270 0

热门文章

最新文章