ΕΙΣΑΓΩΓΗ

Αυτό το άρθρο περιγράφει ένα δείγμα πλαισίου All-in-One, που είναι διαθέσιμο για λήψη. Αυτό το δείγμα κώδικα δείχνει τον τρόπο για την αποστολή και λήψη αρχείων από απομακρυσμένο ή τοπικό διακομιστή στο ASP.NET. Μπορείτε να κάνετε λήψη των πακέτων δείγμα από τα παρακάτω εικονίδια λήψης. Διατίθενται και C# και Visual Basic .NET εκδόσεις γλώσσας του πακέτου του δείγματος.


Αυτό το δείγμα κώδικα δείχνει τον τρόπο για την αποστολή και λήψη αρχείων από ένα διακομιστή που δεν είναι στην εμβέλεια του τομέα της αίτησης του χρήστη. Η λειτουργικότητα παρέχεται για τη μεταφορά αρχείων με το HTTP και FTP πρωτόκολλα. Επίσης, αυτό το δείγμα κώδικα χρησιμοποιεί ενιαία αναγνωριστικά πόρου (URI) για να προσδιορίσει τις θέσεις των αρχείων σε ένα διακομιστή. Οι κλάσεις κλειδιού που χρησιμοποιείται σε αυτό το δείγμα κώδικα είναι η υπηρεσία WebClient κλάση και η κλάση WebRequest .

Επίπεδο δυσκολίας




alternate text

Πληροφορίες λήψης

Για να κάνετε λήψη αυτό το δείγμα κώδικα, κάντε κλικ σε μία από τις ακόλουθες συνδέσεις:

Τεχνική επισκόπηση

Είναι αρκετά εύκολο για την αποστολή και λήψη αρχείων από έναν απομακρυσμένο διακομιστή στο ASP.NET. Η βιβλιοθήκη κλάσης .NET Framework παρέχει ορισμένα αντικείμενα ελαφριά αίτησης. Η υπηρεσία WebClient κλάση είναι μια κλάση υψηλού επιπέδου, η οποία διευκολύνει τις επικοινωνίες διακομιστή. WebRequest αντικείμενα που χρησιμοποιούνται από την κλάση WebClient να υποβάλλουν αιτήσεις. Οι κλάσεις HttpWebRequest και FtpWebRequest είναι πρωτόκολλο υλοποιήσεις της σύνοψης την κλάση WebRequest . HttpWebRequest υλοποιεί τις μεθόδους GET και ΚΑΤΑΧΏΡΗΣΗ του πρωτοκόλλου HTTP για την αποστολή και λήψη αρχείων. FtpWebRequest υλοποιεί τις μεθόδους Απθικευση και ακολουθίας RETR του πρωτοκόλλου FTP για την αποστολή και λήψη αρχείων.


Αυτό το δείγμα κώδικα χρησιμοποιεί τις μεθόδους UploadData και DownloadData της κλάσης WebClient για τη μεταφορά δεδομένων από και προς έναν απομακρυσμένο διακομιστή URI. Η μέθοδος UploadData χρησιμοποιείται με το πρωτόκολλο HTTP μεθόδου PUT και το "εφαρμογή/x-www-form-urlencoded" Internet τύπος μέσου. Η μέθοδος DownloadData χρησιμοποιείται με ένα αντικείμενο FileStream αποθήκευσης εισερχόμενη ροή δεδομένων και η εγγραφή του πίνακα byte σε ένα τοπικό αρχείο.

Επισκόπηση του δείγματος

Σε αυτό το δείγμα κώδικα, θα βρείτε το αρχείο RemoteFileForm.aspx, το οποίο εξηγεί πώς να χρησιμοποιήσετε τις ακόλουθες δύο νέες κλάσεις:

  • RemoteUpload

  • RemoteDownload

Η κλάση RemoteUpload

Η κλάση RemoteUpload έχει δύο εξαρτημένες κλάσεις. Αυτές οι κλάσεις είναι HttpRemoteUpload και FtpRemoteUpload. Και τις δύο κατηγορίες, χρησιμοποιήστε τη συνάρτηση κατασκευής RemoteUpload . Η κλάση RemoteUpload απαιτεί έναν πίνακα byte των δεδομένων αρχείων και διακομιστή 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 που βρίσκεται πριν από τη λήψη εκκίνηση. Η κλάση ανακτά τη ροή που περιέχει τα δεδομένα απόκρισης από το διακομιστή και στη συνέχεια γράφει αυτό πίνακας byte σε ένα 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 , επισκεφθείτε την ακόλουθη τοποθεσία Web του Microsoft Developer (MSDN):

Γενικές πληροφορίες σχετικά με την κλάση υπηρεσίας WebClientΓια περισσότερες πληροφορίες σχετικά με τη μέθοδο UploadData , επισκεφθείτε την ακόλουθη τοποθεσία MSDN στο Web:

Γενικές πληροφορίες σχετικά με τη μέθοδο UploadDataΓια περισσότερες πληροφορίες σχετικά με τη μέθοδο DonwloadData , επισκεφθείτε την ακόλουθη τοποθεσία MSDN στο Web:

Γενικές πληροφορίες σχετικά με τη μέθοδο DonwloadDataΓια περισσότερες πληροφορίες σχετικά με τη μέθοδο FtpWebRequest , επισκεφθείτε την ακόλουθη τοποθεσία MSDN στο Web:

Γενικές πληροφορίες σχετικά με τη μέθοδο FtpWebRequestΓια περισσότερες πληροφορίες σχετικά με τον τρόπο αποστολής αρχείων με FTP, επισκεφθείτε την ακόλουθη τοποθεσία MSDN στο Web:

Τρόπος αποστολής αρχείων με FTP

Περισσότερες πληροφορίες

Τι είναι το πλαίσιο Κωδικός All-in-One;

Πλαίσιο κώδικα All-in-One εμφανίζει περισσότερες τεχνικές προγραμματισμού Microsoft χρησιμοποιώντας δείγματα κώδικα σε διαφορετικές γλώσσες προγραμματισμού. Κάθε παράδειγμα προσεκτικά είναι επιλεγμένο, να αποτελείται και να τεκμηριώνονται για να εμφανίσετε ένα κοινό σενάριο κώδικα. Για περισσότερες πληροφορίες σχετικά με το πλαίσιο Κωδικός All-in-One, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:

http://1code.codeplex.com

Πώς μπορείτε να βρείτε περισσότερα δείγματα κώδικα πλαίσιο All-in-One

Για να βρείτε περισσότερα δείγματα κώδικα πλαίσιο All-in-One, αναζήτηση για "kbcodefx", καθώς και τις σχετικές λέξεις-κλειδιά του Microsoft τοποθεσία Web υποστήριξης. Ή, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:

Δείγματα κώδικα πλαίσιο All-in-One

Γρήγορη δημοσίευση αποποίηση ευθυνών

Microsoft corporation ή/και οι ΑΝΤΙΣΤΟΙΧΟΙ ΠΡΟΜΗΘΕΥΤΕΣ ΤΗΣ βεβαιωθείτε δεν αναπαραστάσεις σχετικά με την καταλληλότητα, αξιοπιστία ή ακρίβεια των πληροφοριών και των ΣΧΕΤΙΚΩΝ ΓΡΑΦΙΚΩΝ που περιέχονται στο παρόν έγγραφο. Όλες αυτές οι πληροφορίες και τα ΣΧΕΤΙΚΑ ΓΡΑΦΙΚΑ παρέχονται "ως έχουν" χωρίς κανενός είδους εγγύηση. Microsoft ή/και οι ΑΝΤΙΣΤΟΙΧΟΙ ΠΡΟΜΗΘΕΥΤΕΣ ΤΗΣ δεν ΠΑΡΕΧΟΥΝ ΟΛΕΣ ΤΙΣ ΕΓΓΥΗΣΕΙΣ και προϋποθέσεων που αφορούν αυτές τις πληροφορίες, και που σχετίζονται με τα γραφικά, συμπεριλαμβανομένων όλων των ΣΙΩΠΗΡΩΝ ΕΓΓΥΗΣΕΩΝ και ΟΡΩΝ ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ, καταλληλότητας για συγκεκριμένο σκοπό, ποιότητας κατασκευής προσπάθεια, ΔΙΚΑΙΩΜΑΤΩΝ ΤΙΤΛΩΝ και μη ΠΑΡΑΒΙΑΣΗΣ. Ειδικότερα συμφωνούν ότι σε καμία περίπτωση Microsoft ή/και οι ΠΡΟΜΗΘΕΥΤΕΣ ΤΗΣ ευθύνεται για οποιαδήποτε άμεση, έμμεση, ζημία, τα παρεπόμενα, ειδικά, αποθετική ΖΗΜΙΕΣ ή ΟΠΟΙΕΣΔΗΠΟΤΕ ΖΗΜΙΕΣ ΣΥΜΠΕΡΙΛΑΜΒΑΝΟΜΕΝΩΝ, ΧΩΡΙΣ ΠΕΡΙΟΡΙΣΜΟ, αποζημίωση για απώλεια χρήσης, δεδομένων ή τα κέρδη, που προκύπτουν από ή με οποιονδήποτε τρόπο που συνδέονται με τη χρήση ή την αδυναμία χρήσης των πληροφοριών και ΣΧΕΤΙΚΩΝ ΓΡΑΦΙΚΩΝ που περιέχονται στο παρόν έγγραφο, είτε βάσει σύμβασης, αδικοπραξίας, αμέλειας, αντικειμενικής ευθύνης ή με άλλο τρόπο, ακόμη και αν έχει γίνει η Microsoft ή κάποιον από τους προμηθευτές για την πιθανότητα πρόκλησης ζημιών.

Χρειάζεστε περισσότερη βοήθεια;

Αναπτύξτε τις δεξιότητές σας
Εξερευνήστε το περιεχόμενο της εκπαίδευσης
Αποκτήστε πρώτοι τις νέες δυνατότητες
Συμμετοχή στο Microsoft Insider

Σας βοήθησαν αυτές οι πληροφορίες;

Πόσο ικανοποιημένοι είστε με τη γλωσσική ποιότητα;
Τι επηρέασε την εμπειρία σας;

Σας ευχαριστούμε για τα σχόλιά σας!

×