使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

简介

本文介绍了多功能一体框架示例,它可供下载。此代码示例演示如何上载和下载文件从远程或本地服务器在 ASP.NET 中。您可以从下面的下载图标下载示例文件包。C# 和 Visual Basic.NET 语言版本的示例包不可用。


此代码示例演示如何上载和下载文件从用户的请求域范围中不是一个服务器。提供 HTTP 和 FTP 协议的文件传输功能。另外,此代码示例使用统一资源标识符 (Uri) 标识服务器上的文件的位置。此代码示例中使用的关键类是WebClient类和WebRequest类。

难度级别




alternate text

下载信息

若要下载此代码示例,请单击以下链接之一:

技术概述

它是相当容易上载和下载文件从 ASP.NET 中的远程服务器。.NET Framework 类库提供了一些轻量的请求对象。WebClient类是简化服务器交互的高级别类。WebClient类将使用WebRequest对象发出请求。HttpWebRequest和FtpWebRequest的类是抽象的WebRequest类的协议特定的实现。HttpWebRequest实现上载和下载文件的 HTTP 协议的 GET 和 POST 方法。FtpWebRequest实现上载和下载文件的 FTP 协议的存储和 RETR 方法。


此代码示例使用WebClient类的UploadData和DownloadData方法来传输数据到和来自远程服务器的 URI。UploadData方法使用 HTTP 协议的 PUT 方法和"应用程序/x-www-窗体-urlencoded"互联网媒体类型。文件流对象使用DownloadData方法来存储传入的数据流和字节数组写入本地文件。

示例概述

在此示例代码中,您将找到 RemoteFileForm.aspx 文件,说明如何使用以下两个新类:

  • RemoteUpload

  • RemoteDownload

RemoteUpload 类

RemoteUpload类有两个子类。这些类是HttpRemoteUpload和FtpRemoteUpload。这两个类使用RemoteUpload的构造函数。RemoteUpload类需要的文件数据和服务器 URI 的字节数组。您还可以指定要用于上载的文件的名称。FtpRemoteUpload类使用FtpWebRequest直接 (而不是使用较高级别的WebClient类) 来处理 FTP 协议的具体要求。


下面的类定义RemoteUpload类的详细信息,请参阅:
public class HttpRemoteUpload : RemoteUpload
{
public HttpRemoteUpload(byte[] fileData, string fileNamePath, string urlString)
: base(fileData, fileNamePath, urlString)
{

}

public override bool UploadFile()
{
byte[] postData;
try
{
postData = this.FileData;
using (WebClient client = new WebClient())
{
client.Credentials = CredentialCache.DefaultCredentials;
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
client.UploadData(this.UrlString, "PUT", postData);
}

return true;
}
catch (Exception ex)
{
throw new Exception("Failed to upload", ex.InnerException);
}

}
}

public class FtpRemoteUpload : RemoteUpload
{
public FtpRemoteUpload(byte[] fileData, string fileNamePath, string urlString)
: base(fileData, fileNamePath, urlString)
{

}

public override bool UploadFile()
{
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(this.UrlString);
reqFTP.KeepAlive = true;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.ContentLength = this.FileData.Length;

int buffLength = 2048;
byte[] buff = new byte[buffLength];
MemoryStream ms = new MemoryStream(this.FileData);

try
{
int contenctLength;
using (Stream strm = reqFTP.GetRequestStream())
{
contenctLength = ms.Read(buff, 0, buffLength);
while (contenctLength > 0)
{
strm.Write(buff, 0, contenctLength);
contenctLength = ms.Read(buff, 0, buffLength);
}
}

return true;
}
catch (Exception ex)
{
throw new Exception("Failed to upload", ex.InnerException);
}
}

} 在 RemoteFileForm.cs 文件中,当您单击上载按钮,将创建RemoteUpload对象的一个实例。通过服务器 URI 和本地的物理文件路径作为参数来创建对象。


注意:如果不指定文件名用于存储在服务器上的文件,系统将自动生成文件的名称根据当前日期和时间的服务器上。精确到毫秒的日期和时间。在UploadData方法完成后,结果将显示在当前页上。

RemoteDownload 类

RemoteDownload类还具有两个子类。这些类是HttpRemoteDownload和FtpRemoteDownload。 RemoteDownload类需要一个 URI 资源和本地的物理目录。RemoteDownload类进行检查以确保该 URI 的资源下载前存在被启动。此类检索包含来自服务器的响应数据,然后将此字节数组写入到文件流的流。FtpRemoteDownload类使用FtpWebRequest直接 (而不是使用较高级别的WebClient类) 来处理 FTP 协议的具体要求。


下面的类定义RemoteDownload类的详细信息,请参阅:
public class HttpRemoteDownload : RemoteDownload
{
public HttpRemoteDownload(string urlString, string descFilePath)
: base(urlString, descFilePath)
{

}

public override bool DownloadFile()
{
string fileName = System.IO.Path.GetFileName(this.UrlString);
string descFilePathAndName =
System.IO.Path.Combine(this.DescFilePath, fileName);
try
{
WebRequest myre = WebRequest.Create(this.UrlString);
}
catch
{
return false;
}
try
{
byte[] fileData;
using (WebClient client = new WebClient())
{
fileData = client.DownloadData(this.UrlString);
}
using (FileStream fs =
new FileStream(descFilePathAndName, FileMode.OpenOrCreate))
{
fs.Write(fileData, 0, fileData.Length);
}
return true;
}
catch (Exception ex)
{
throw new Exception("download field", ex.InnerException);
}
}
}

public class FtpRemoteDownload : RemoteDownload
{
public FtpRemoteDownload(string urlString, string descFilePath)
: base(urlString, descFilePath)
{

}

public override bool DownloadFile()
{
FtpWebRequest reqFTP;

string fileName = System.IO.Path.GetFileName(this.UrlString);
string descFilePathAndName =
System.IO.Path.Combine(this.DescFilePath, fileName);

try
{

reqFTP = (FtpWebRequest)FtpWebRequest.Create(this.UrlString);
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;


using (FileStream outputStream = new FileStream(descFilePathAndName, FileMode.OpenOrCreate))
using (FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse())
using (Stream ftpStream = response.GetResponseStream())
{
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
}
return true;
}

catch (Exception ex)
{
throw new Exception("upload failed", ex.InnerException);
}
}
}
注意:有关如何创建和部署示例应用程序的详细信息,请参见下载程序包中包含的 Readme.txt 文件。


语言

此代码示例有以下编程语言:

语言

项目名称

C#

CSRemoteUploadAndDownload

Visual Basic.NET

VRemoteUploadAndDownload

技术类别

  • ASP.NET 2.0

  • ASP.NET 3.5

  • ASP.NET 4.0

参考资料

关于WebClient类的详细信息,请访问下面的 Microsoft 开发人员 (MSDN) 网站:

WebClient 类有关的一般信息UploadData方法的更多信息,请访问下面的 MSDN 网站:

UploadData 方法的常规信息DonwloadData方法的更多信息,请访问下面的 MSDN 网站:

DonwloadData 方法的常规信息FtpWebRequest方法的更多信息,请访问下面的 MSDN 网站:

FtpWebRequest 方法的常规信息有关如何上载使用 FTP 文件的详细信息,请访问下面的 MSDN 网站:

如何使用 FTP 文件上载

详细信息

多功能一体代码框架是什么?

多功能一体代码框架通过使用不同的编程语言中的代码示例显示大多数 Microsoft 开发技术。每个示例是仔细选择、 编写,并且记录下来,以显示一个通用的代码方案。多功能一体代码框架有关的详细信息,请访问下面的 Microsoft 网站:

http://1code.codeplex.com

如何找到更多的多功能一体代码框架示例

要找到更多的多功能一体框架代码示例,请搜索"kbcodefx"以及相关的关键字在 Microsoft 支持网站。或者,请访问下面的 Microsoft 网站:

多功能一体代码框架示例

快速发布免责声明

微软公司和/或其相应的供应商进行关于适用性、 可靠性或准确性的信息和相关的图形包含本文所述的任何表示。所有此类信息和相关的图形被提供"按原样",没有任何形式的担保。微软和/或其相应的供应商特此不作出任何担保和与该信息有关的状况和相关的图形,包括所有的暗示的担保和条件的商业性、 适于特定目的,workmanlike投入、 标题和非侵权性。您明确同意,在任何情况 Microsoft 或其供应商应承担责任的任何直接、 间接、 惩罚性的偶然、 特殊、 后果性的损害赔偿或任何损害任何包括但不限于,使用中,数据的损失或利润,损失掉的或以任何方式使用或无法使用的信息和相关的图形包含本文所述,无论是基于合同、 民事侵权行为、 过失、 严格责任还是其他方式,即使 Microsoft 或其供应商的任何已连接建议赔偿的可能性。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×