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

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

  
Code Behind

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

    1.HttpFileCollection

    2.HttpPostedFile

    3.Request.Files

    4.System.IO.Path

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

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

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

19    }

20    catch(Exception ex)
21    {
22      throw ex;
23    }

24  }

25}

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

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

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

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

13    else
14    {
15      Label3.Text = message;
16    }

17  }

18}

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

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

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

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

21    }

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

26  }

27}

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

    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月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
105 9
|
4月前
|
存储 UED Windows
Windows服务器上大量文件迁移方案
Windows服务器上大量文件迁移方案
293 1
|
5天前
|
存储 安全 网络安全
服务器感染了.baxia勒索病毒,如何确保数据文件完整恢复?
近年来,勒索病毒如.baxia不断演变,利用漏洞、社交工程等手段加密文件,威胁范围扩大。加密货币的兴起使其支付方式更匿名,追踪困难。技术支持尤为重要,添加技术服务号(shuju315),专业团队提供数据恢复方案。面对复杂解密要求,包括赎金支付、个人信息提供和执行特定操作,需保持冷静并寻求帮助。防御措施包括加强安全意识、定期备份数据、安装杀毒软件、避免未知文件、更新系统及制定应急响应计划。
35 11
|
5月前
|
存储 监控 固态存储
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN 分布式存储虚拟化平台VMDK文件1KB问题数据恢复案例
在一例vSAN分布式存储故障中,因替换故障闪存盘后磁盘组失效,一台采用RAID0策略且未使用置备的虚拟机VMDK文件受损,仅余1KB大小。经分析发现,该VMDK文件与内部虚拟对象关联失效导致。恢复方案包括定位虚拟对象及组件的具体物理位置,解析分配空间,并手动重组RAID0结构以恢复数据。此案例强调了深入理解vSAN分布式存储机制的重要性,以及定制化数据恢复方案的有效性。
124 5
|
3月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
43 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
4月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
69 4
|
3月前
|
前端开发 Docker 容器
主机host服务器和Docker容器之间的文件互传方法汇总
Docker 成为前端工具,可实现跨设备兼容。本文介绍主机与 Docker 容器/镜像间文件传输的三种方法:1. 构建镜像时使用 `COPY` 或 `ADD` 指令;2. 启动容器时使用 `-v` 挂载卷;3. 运行时使用 `docker cp` 命令。每种方法适用于不同场景,如静态文件打包、开发时文件同步及临时文件传输。注意权限问题、容器停止后的文件传输及性能影响。
914 0
|
5月前
|
Linux
Linux 服务器下载百度网盘文件
本教程指导如何使用 `bypy` 库从百度网盘下载文件。首先通过 `pip install bypy` 安装库,接着运行 `bypy info` 获取登录链接并完成授权,最后将文件置于指定目录并通过 `bypy downdir /Ziya-13b-v1` 命令下载至本地。
527 1
Linux 服务器下载百度网盘文件
|
4月前
|
开发框架 JavaScript 前端开发
|
5月前
|
存储 安全 文件存储
【服务器数据恢复】Apple苹果Xsan文件系统卷宗误操作导致文件丢失数据恢复案例
客户因误操作删除了macOS服务器上的重要图片和视频文件,需紧急恢复。Xsan文件系统作为苹果专为高负载环境设计的64位簇文件系统,在未有专门恢复工具的情况下,常规RAW恢复仅能提取小部分连续存储的小文件,且无目录结构。通过专业的数据恢复流程,包括安全挂载、阵列重组,并使用专用工具解析文件系统以恢复目录结构,最终成功恢复丢失的文件。此案例突显了Xsan文件系统的特点及其恢复难度。
53 1