ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

บทนำ

บทความนี้อธิบายตัวอย่างออลอินกรอบที่พร้อมใช้งานสำหรับการดาวน์โหลด โค้ดตัวอย่างนี้สาธิตวิธีการอัปโหลด และดาวน์โหลดแฟ้มจากเซิร์ฟเวอร์ระยะไกล หรือภายในเครื่องใน ASP.NET คุณสามารถดาวน์โหลดแพคเกจตัวอย่างจากไอคอนดาวน์โหลดต่อไปนี้ ทั้ง C# และ Visual Basic .NET ภาษารุ่นแพคเกจตัวอย่างจะพร้อมใช้งาน


โค้ดตัวอย่างนี้สาธิตวิธีการอัปโหลด และดาวน์โหลดแฟ้มจากเซิร์ฟเวอร์ที่ไม่ได้อยู่ในขอบเขตของโดเมนการร้องขอของผู้ใช้ ฟังก์ชันการทำงานไว้ให้สำหรับการถ่ายโอนแฟ้มกับโพรโทคอล HTTP และ FTP นอกจากนี้ โค้ดตัวอย่างนี้ใช้ตัวระบุทรัพยากรเป็นรูปแบบ (URIs) เพื่อระบุตำแหน่งของแฟ้มบนเซิร์ฟเวอร์ คลาสที่คีย์ใช้ในโค้ดตัวอย่างนี้คือWebClientคลาสและคลาWebRequest

ระดับความยาก




alternate text

ข้อมูลการดาวน์โหลด

เมื่อต้องการดาวน์โหลดโค้ดตัวอย่างนี้ คลิกการเชื่อมโยงต่อไปนี้:

ภาพรวมทางเทคนิค

ได้ค่อนข้างง่ายต่อการอัปโหลด และดาวน์โหลดแฟ้มจากเซิร์ฟเวอร์ระยะไกลใน ASP.NET ในไลบรารีคลาส.NET Framework ให้วัตถุขอเบาบางอย่าง คลาWebClientเป็นคลาระดับสูงที่ทำให้การโต้ตอบที่เซิร์ฟเวอร์ได้ง่ายขึ้น WebRequestวัตถุจะถูกใช้ โดยคลาWebClientการร้องขอให้ คลาสที่HttpWebRequestและFtpWebRequestถูกใช้งานโพรโทคอลเฉพาะของคลาWebRequestบทคัดย่อ HttpWebRequestประมวลผลวิธีการรับและลงรายการบัญชีของโพรโทคอล HTTP เพื่ออัปโหลด และดาวน์โหลดแฟ้ม FtpWebRequestประมวลผลวิธีการ STOR และเวลาทำซ้ำของโพรโทคอล FTP เพื่ออัปโหลด และดาวน์โหลดแฟ้ม


โค้ดตัวอย่างนี้ใช้วิธีการUploadDataและDownloadDataของคลาWebClientเพื่อโอนย้ายข้อมูลไปยัง และ จากเซิร์ฟเวอร์ระยะไกล URI วิธีการUploadDataถูกใช้กับวิธีการย้ายของโพรโทคอ HTTP และ "แอพลิเค ชัน/x-www-ฟอร์ม-urlencoded" อินเทอร์เน็ตชนิดสื่อ มีใช้วิธีDownloadDataด้วยวัตถุFileStreamเพื่อเก็บสตรีมข้อมูลขาเข้า และเขียนอาร์เรย์ของไบต์ไปยังแฟ้มภายในเครื่อง

ภาพรวมตัวอย่าง

ในตัวอย่างโค้ดนี้ คุณจะพบแฟ้ม 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 ที่มีอยู่ก่อนการดาวน์โหลดจะเริ่มต้นใช้งาน คลาดึงกระแสข้อมูลที่ประกอบด้วยข้อมูลการตอบสนองจากเซิร์ฟเวอร์ และเขียนอาร์เรย์ของไบต์นี้เป็นFileStreamแล้ว คลา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 ที่รวมอยู่ในแพคเกจดาวน์โหลด


ภาษา

ตัวอย่างรหัสนี้มีอยู่ในภาษาการเขียนโปรแกรมต่อไปนี้:

ภาษา

ชื่อโครงการ

Visual 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

วิธีการค้นหาตัวอย่างรหัส Framework ออลอินเพิ่มเติม

เมื่อต้องการค้นหาตัวอย่างรหัส Framework ออลอินเพิ่มเติม ค้นหา "kbcodefx" ร่วมกับคำสำคัญที่เกี่ยวข้องใน Microsoft สนับสนุนเว็บไซต์ หรือ แวะไปที่เว็บไซต์ของ Microsoft ต่อไปนี้:

ตัวอย่างรหัส Framework ออลอิน

คำปฏิเสธการเผยแพร่อย่างรวดเร็ว

Microsoft corporation และ/หรือของซัพพลายเออร์แต่ละรายทำไม่ได้ยืนยันใด ๆ เกี่ยวกับความเหมาะสม ความน่าเชื่อถือ หรือความถูกต้องของข้อมูลและกราฟิกที่เกี่ยวข้องที่มีอยู่ในที่นี้ ข้อมูลและกราฟิกที่เกี่ยวข้องทั้งหมดดังกล่าวไว้ให้ "ตามที่เป็นอยู่" โดยไม่มีการรับประกันใด ๆ Microsoft และ/หรือซัพพลายเออร์ที่เกี่ยวข้องแปลง disclaim รับประกันและเงื่อนไขที่เกี่ยวข้องกับข้อมูลนี้ทั้งหมด และที่เกี่ยวข้องกับกราฟิก รวมถึงการรับประกันโดยนัยทั้งหมดและเงื่อนไขของความสามารถในเชิงพาณิชย์ ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ workmanlike ความพยายาม ชื่อเรื่อง และที่ไม่ใช่การละเมิด โดยเฉพาะอย่างยิ่งตกลงว่า ไม่ จะ Microsoft และ/หรือซัพพลายเออร์ที่รับผิดชอบใด ๆ เกิดจากทางตรง ทางอ้อม โทษ พิเศษ ต่อการเสียหาย หรือเสียหายใด ๆ ก็ตามรวมถึง แต่ไม่ เสียหายสำหรับการใช้ ข้อมูล หรือ กำไร เกิดจากทั้งหมด หรือ ในวิธีใด ๆ ที่เชื่อมโยงกับการใช้งานหรือไม่สามารถใช้ข้อมูลและกราฟิกที่เกี่ยวข้องอยู่ในที่นี้ ว่าตามสัญญา สูญ ความผิด หนี้สินที่เข้มงวด หรืออย่างอื่น ใด แม้ว่า Microsoft หรือของซัพพลายเออร์ใด ๆ มีการ คำแนะนำเกี่ยวกับเสียหายที่อาจเกิดขึ้น

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ
เมื่อกดส่ง คำติชมของคุณจะถูกใช้เพื่อปรับปรุงผลิตภัณฑ์และบริการของ Microsoft ผู้ดูแลระบบ IT ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×