在写 ASP.NET 应用的时候, 往往会碰到客户端上传文件的情况,这个时候客户一般希望能够想 windows 应用一样, 能够选择文件夹, 浏览所要下载的文件,批量上传, 这个时候. 有几个特征:
- 1. 客户可以自由的浏览本地的文件夹, 选择多个文件同时上传.
- 2. 上传之前用户无法预知上传文件的数目.
- 3. 因为是 ASP.NET 应用, 客户端可能没有装 .NET Framework.
其实,我们知道.如果要跟 IE 端客户文件系统交互的话,代码必须在客户端执行. 这个时候我们可以写一个 Activex 控件来实现选择文件夹和上传.
一般我们常用两种方式往服务端上传文件
1. FTP , 可以调用一些现成的 FTP 组件, 在 VB 里面可以调用 Internet Transfer Control
2. HTTP , 使用 HTTP Post application/octet-stream 格式的字节流给服务端.
FTP 很容易实现,我们不予考虑,着重提一下HTTP 的方式.
我们在单个文件上传的时候,一般都有以下的代码:
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
<head>
<script runat="server">
void Button1_Click(object sender, EventArgs e)
{
// Get the HtmlInputFile control from the Controls collection
// of the PlaceHolder control.
HtmlInputFile file = (HtmlInputFile)Place.FindControl("File1");
// Make sure a file was submitted.
if (Text1.Value == "")
{
Span1.InnerHtml = "Error: you must enter a file name";
return;
}
// Save file to server.
if (file.PostedFile != null)
{
try
{
file.PostedFile.SaveAs("c://temp//"+Text1.Value);
Span1.InnerHtml = "File uploaded successfully to " +
"<b>c://temp//" + Text1.Value + "</b> on the Web server";
}
catch (Exception exc)
{
Span1.InnerHtml = "Error saving file <b>c://temp//" +
Text1.Value + "</b><br>" + exc.ToString();
}
}
}
void Page_Load(object sender, EventArgs e)
{
// Create a new HtmlInputFile control.
HtmlInputFile file = new HtmlInputFi