Làm thế nào để tải lên và tải xuống các tệp từ máy chủ từ xa trong ASP.NET

GIỚI THIỆU

Bài viết này mô tả một mẫu tất cả trong một khung có sẵn để tải về. Mẫu mã này giải thích làm thế nào để tải lên và tải xuống các tệp từ máy chủ từ xa hoặc địa phương trong ASP.NET. Bạn có thể tải xuống các gói mẫu từ các biểu tượng tải về sau. Cả C# và Visual Basic .NET Phiên bản ngôn ngữ của gói mẫu có sẵn.


Mẫu mã này giải thích làm thế nào để tải lên và tải xuống các tệp từ máy chủ mà không có trong phạm vi của người dùng yêu cầu tên miền. Chức năng được cung cấp để chuyển tệp với giao thức HTTP và FTP. Ngoài ra, mẫu mã này sử dụng định dạng tài nguyên đồng nhất (URI) để xác định vị trí của các tệp trên máy chủ. Khoá học sử dụng trong mẫu mã này là loại WebClient và lớp WebRequest .

Mức độ khó khăn




alternate text

Thông tin tải xuống

Để tải xuống mẫu mã này, bấm vào một trong các liên kết sau:

Tổng quan về kỹ thuật

Tương đối dễ dàng để tải lên và tải xuống các tệp từ máy chủ từ xa trong ASP.NET. Thư viện lớp .NET Framework cung cấp một số đối tượng nhẹ yêu cầu. WebClient lớp là một lớp cao cấp dễ dàng tương tác máy chủ. WebRequest đối tượng được sử dụng lớp WebClient cho yêu cầu. Các lớp HttpWebRequest và FtpWebRequest là dành riêng cho giao thức triển khai tóm tắt WebRequest lớp. HttpWebRequest thực hiện các phương pháp nhận và gửi của giao thức HTTP để tải lên và tải xuống tệp. FtpWebRequest thực hiện phương pháp STOR và Tran của giao thức FTP để tải lên và tải xuống tệp.


Mẫu mã này sử dụng các phương pháp UploadData và DownloadData loại WebClient chuyển dữ liệu đến và từ máy chủ từ xa URI. Phương pháp UploadData được sử dụng giao thức HTTP đặt phương pháp và các "ứng dụng/x-www-form-urlencoded" Internet loại phương tiện. Phương pháp DownloadData được sử dụng một đối tượng FileStream để lưu trữ các dòng dữ liệu và viết mảng byte cho tệp cục bộ.

Tổng quan về mẫu

Mã mẫu này, bạn sẽ tìm thấy tệp RemoteFileForm.aspx giải thích cách sử dụng hai lớp học mới sau:

  • RemoteUpload

  • RemoteDownload

Lớp RemoteUpload

Lớp RemoteUpload có hai lớp con. Các lớp học là HttpRemoteUpload và FtpRemoteUpload. Cả lớp sử dụng xây dựng RemoteUpload . Lớp RemoteUpload yêu cầu một mảng byte dữ liệu tệp và máy chủ URI. Bạn cũng có thể chỉ định tên sử dụng cho tệp đã tải lên. Lớp FtpRemoteUpload sử dụng FtpWebRequest trực tiếp (thay vì sử dụng lớp WebClient cao cấp) để xử lý các yêu cầu cụ thể của giao thức FTP.


Xem các định nghĩa lớp sau đây để biết thêm thông tin về loại 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);
}
}

} Trong các tập tin RemoteFileForm.cs, khi bạn bấm vào nút tải lên , phiên bản của đối tượng RemoteUpload được tạo ra. Chuyển máy chủ URI và đường dẫn tệp cục bộ vật lý như các tham số để tạo ra các đối tượng.


Lưu ý Nếu bạn không chỉ định tên tệp sử dụng để lưu trữ các tập tin trên máy chủ, Hệ thống sẽ tự động tạo tên tệp hiện tại ngày và giờ trên máy chủ. Ngày và giờ là chính xác millisecond. Sau khi hoàn tất phương pháp UploadData , kết quả được hiển thị trên trang hiện tại.

Lớp RemoteDownload

Lớp RemoteDownload cũng có hai con lớp. Các lớp học là HttpRemoteDownload và FtpRemoteDownload. Lớp RemoteDownload yêu cầu tài nguyên URI và thư mục vật lý địa phương. Lớp RemoteDownload kiểm tra để đảm bảo rằng URI nguyên tồn tại trước khi tải xuống được khởi động. Lớp lấy dòng chứa dữ liệu phản hồi từ máy chủ, và sau đó ghi mảng byte này vào một FileStream. Lớp FtpRemoteDownload sử dụng FtpWebRequest trực tiếp (thay vì sử dụng lớp WebClient cao cấp) để xử lý các yêu cầu cụ thể của giao thức FTP.


Xem các định nghĩa lớp sau đây để biết thêm thông tin về loại 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);
}
}
}
Lưu ý Để biết thêm thông tin về cách tạo và triển khai ứng dụng mẫu, xem tệp Readme.txt được bao gồm trong gói tải xuống.


Ngôn ngữ

Mẫu mã này có sẵn trong các ngôn ngữ sau:

Ngôn ngữ

Tên dự án

Visual C#

CSRemoteUploadAndDownload

Visual Basic.NET

VRemoteUploadAndDownload

Loại công nghệ

  • ASP.NET 2.0

  • ASP.NET 3.5

  • ASP.NET 4.0

Tham khảo

Để biết thêm thông tin về loại WebClient , ghé thăm website sau của nhà phát triển Microsoft (MSDN):

Thông tin chung về lớp WebClientĐể biết thêm thông tin về phương pháp UploadData , ghé thăm website sau của MSDN:

Thông tin chung về phương pháp UploadDataĐể biết thêm thông tin về phương pháp DonwloadData , ghé thăm website sau của MSDN:

Thông tin chung về phương pháp DonwloadDataĐể biết thêm thông tin về phương pháp FtpWebRequest , ghé thăm website sau của MSDN:

Thông tin chung về phương pháp FtpWebRequestĐể biết thêm thông tin về cách tải lên tệp FTP, hãy truy cập trang web MSDN sau đây:

Làm thế nào để tải lên tệp FTP

Thông tin

Tất cả-trong-một mã Framework là gì?

Tất cả-trong-một mã khung Hiển thị hầu hết các kỹ thuật phát triển Microsoft bằng cách sử dụng mẫu mã ngôn ngữ khác nhau. Ví dụ mỗi cẩn thận lựa chọn, bao gồm và tài liệu cho một trường hợp mã phổ biến. Để biết thêm thông tin về tất cả-trong-một mã khung, ghé thăm website sau của Microsoft:

http://1code.codeplex.com

Làm thế nào để thêm tất cả trong một khuôn khổ mã mẫu

Để biết thêm tất cả trong một khuôn khổ mã mẫu, hãy tìm kiếm "kbcodefx" cùng với các từ khóa liên quan trên Microsoft hỗ trợ trang Web. Hoặc, hãy ghé thăm website sau của Microsoft:

Tất cả trong một khuôn khổ mã mẫu

Miễn trừ trách nhiệm xuất bản nhanh

Tập đoàn Microsoft và/hoặc các nhà cung cấp tương ứng thực hiện đại diện không phù hợp, độ tin cậy hoặc tính chính xác của thông tin và đồ hoạ liên quan ở đây. Tất cả các thông tin và đồ hoạ liên quan được cung cấp "as is" không có bảo hành nào. Microsoft và/hoặc các nhà cung cấp tương ứng hướng từ chối mọi bảo đảm và điều kiện đối với thông tin này và sơ đồ hoạ, ngụ ý bảo đảm và điều kiện bán, cho một mục đích cụ thể, trường nỗ lực, tiêu đề và không vi phạm. Bạn đặc biệt đồng ý rằng trong trường hợp Microsoft và/hoặc các nhà cung cấp phải chịu trách nhiệm cho bất kỳ trực tiếp, gián tiếp, trừng phạt, ngẫu nhiên, đặc biệt, do hậu quả thiệt hại hoặc bất kỳ thiệt hại nào bao gồm nhưng không giới hạn, thiệt hại trong sử dụng, dữ liệu hoặc lợi nhuận phát sinh từ hoặc trong bất kỳ cách nào liên quan đến việc sử dụng hoặc không thể sử dụng thông tin và đồ hoạ liên quan có trong tài liệu này, xem theo hợp đồng, sai lầm, Nokia, trách nhiệm pháp lý nghiêm ngặt hay nói cách khác, ngay cả nếu Microsoft hoặc bất kỳ các nhà cung cấp thông báo về khả năng thiệt hại.

Bạn cần thêm trợ giúp?

Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Microsoft dùng nội bộ

Thông tin này có hữu ích không?

Cảm ơn phản hồi của bạn!

×