Come caricare e scaricare file da un server remoto in ASP.NET


Clicca qui per visualizzare la versione originale in inglese dell’articolo: 2512241

INTRODUZIONE

In questo articolo viene descritto un esempio di framework All-In-One è disponibile per il download. In questo esempio di codice viene illustrato come caricare e scaricare file da un server remoto o locale in ASP.NET. È possibile scaricare i pacchetti di esempio seguenti icone di download. C# e Visual Basic .NET le versioni di lingua del pacchetto di esempio sono disponibili.

In questo esempio di codice viene illustrato come caricare e scaricare file da un server che non rientra nell'ambito del dominio di richiesta dell'utente. Funzionalità è disponibile per il trasferimento di file con i protocolli HTTP e di FTP. Inoltre, in questo esempio di codice utilizza Uniform Resource Identifier (URI) per identificare le posizioni dei file su un server. Le classi principali utilizzate in questo esempio di codice sono la classe WebClient e la classe WebRequest .

Livello di difficoltà



Informazioni sul download

Per scaricare questo esempio di codice, fare clic su uno dei seguenti collegamenti:

Panoramica tecnica

È abbastanza semplice caricare e scaricare file da un server remoto in ASP.NET. La libreria di classi.NET Framework fornisce alcuni oggetti leggeri richiesta. La classe WebClient è una classe di alto livello che semplifica le interazioni di server. Gli oggetti WebRequest vengono utilizzati dalla classe WebClient per effettuare richieste. Le classi HttpWebRequest e FtpWebRequest sono implementazioni specifiche del protocollo della classe WebRequest astratta. HttpWebRequest implementa i metodi GET e POST del protocollo HTTP per caricare e scaricare i file. FtpWebRequest implementa i metodi STOR e RETR del protocollo FTP per caricare e scaricare i file.

In questo esempio di codice utilizza i metodi UploadData e DownloadData della classe WebClientper trasferire dati da e verso un URI del server remoto.Viene utilizzato il metodoUploadDatacon metodo PUT del protocollo HTTP e digitare il supporto Internet "applicazione/x-www-form-urlencoded". Il metodoDownloadData viene utilizzato con un oggetto FileStream per memorizzare il flusso di dati in arrivo e scrivere la matrice di byte in un file locale.

Cenni preliminari sull'esempio

In questo esempio di codice, troverai il file RemoteFileForm.aspx che spiega come utilizzare le seguenti due nuove classi:

  • RemoteUpload

  • RemoteDownload

La classe RemoteUpload

La classe RemoteUpload dispone di due classi figlio. Queste classi sono HttpRemoteUpload e FtpRemoteUpload. Entrambe le classi utilizzano il costruttore RemoteUpload . La classe RemoteUpload è necessaria una matrice di byte di dati del file e un URI del server. È inoltre possibile specificare il nome da utilizzare per il file caricato. La classe FtpRemoteUpload utilizza FtpWebRequest direttamente (anziché la classe WebClient di livello superiore) per gestire i requisiti specifici del protocollo FTP.

Vedere le seguenti definizioni di classe per ulteriori informazioni sulla classe 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);
}
}

}Nel file RemoteFileForm.cs, quando si fa clic sul pulsante Carica , viene creata un'istanza dell'oggetto RemoteUpload . Passare l'URI del server e un percorso fisico del file locale come parametri per creare l'oggetto.

Nota. Se non si specifica un nome di file da utilizzare per archiviare il file sul server, il sistema genererà automaticamente un nome di file secondo la data corrente e l'ora del server. La data e l'ora è approssimata al millisecondo. Dopo aver completato il metodo UploadData , il risultato viene visualizzato nella pagina corrente.

La classe RemoteDownload

La classe RemoteDownload dispone anche di due classi figlio. Queste classi sono HttpRemoteDownload e FtpRemoteDownload. La classe RemoteDownload richiede una risorsa URI e una directory fisica locale. La classe RemoteDownload si verifica per assicurarsi che la risorsa URI esista prima del download viene avviato. La classe recupera il flusso che contiene i dati della risposta dal server e quindi scrive la matrice di byte in un FileStream. La classe FtpRemoteDownload utilizza FtpWebRequest direttamente (anziché la classe WebClient di livello superiore) per gestire i requisiti specifici del protocollo FTP.

Vedere le seguenti definizioni di classe per ulteriori informazioni sulla classe 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);
}
}
}
Nota. Per ulteriori informazioni su come creare e distribuire l'applicazione di esempio, vedere il file Readme. txt incluso nel pacchetto di download.

Lingue

Questo esempio di codice è disponibile nei seguenti linguaggi di programmazione:

Lingua

Nome del progetto

Visual C#

CSRemoteUploadAndDownload

Visual Basic.NET

VRemoteUploadAndDownload

Categoria di tecnologia

  • ASP.NET 2.0

  • ASP.NET 3.5

  • ASP.NET 4.0

Riferimenti

Per ulteriori informazioni sulla classe WebClient , visitare il seguente sito Web Microsoft Developer (MSDN):

Informazioni generali sulla classe WebClientPer ulteriori informazioni sul metodo UploadData , visitare il seguente sito Web MSDN:

Informazioni generali sul metodo UploadDataPer ulteriori informazioni sul metodo DonwloadData , visitare il seguente sito Web MSDN:

Informazioni generali sul metodo DonwloadDataPer ulteriori informazioni sul metodo FtpWebRequest , visitare il seguente sito Web MSDN:

Informazioni generali sul metodo FtpWebRequestPer ulteriori informazioni su come caricare i file con FTP, visitare il seguente sito Web MSDN:

Come caricare i file con FTP

Informazioni

Che cos'è la struttura del codice All-In-One?

Struttura del codice All-In-One Mostra la maggior parte delle tecniche di sviluppo Microsoft utilizzando esempi di codice in diversi linguaggi di programmazione. Ogni esempio è attentamente selezionato, composto e documentato per visualizzare uno scenario comune di codice. Per ulteriori informazioni sulla struttura del codice All-In-One, visitare il seguente sito Web Microsoft:

http://1code.codeplex.com

Come trovare ulteriori esempi di codice Framework All-In-One

Per trovare ulteriori esempi di codice Framework All-In-One, cercare "kbcodefx" con parole chiave correlate Microsoft supporto sito Web. In alternativa, visitare il seguente sito Web Microsoft:

Esempi di codice Framework All-In-One

Disclaimer pubblicazione rapida

Corporation Microsoft e/o i suoi fornitori non rilasciano alcuna dichiarazione sull'accuratezza delle informazioni e le immagini relative contenute nel presente documento, l'affidabilità o idoneità. Tutte tali informazioni e le immagini relative sono fornite "come sono" senza garanzie di alcun tipo. Microsoft e/o i suoi fornitori non riconoscono tutte le garanzie e condizioni per quanto riguarda tali informazioni e le immagini relative, incluse tutte le garanzie implicite e le condizioni di commerciabilità, idoneità per un fine particolare, perizia, titolo e non violazione. In particolare l'utente accetta che in nessun caso Microsoft e/o dei suoi fornitori è responsabile per i danni di diretti, indiretti, PUNITIVI, INCIDENTALI, danni speciali, consequenziali o danni qualsiasi tipo inclusi, senza limitazione alcuna, danni per perdita di utilizzo, dati o profitti, derivanti da o in qualsiasi modo connessi con l'utilizzo di o dall'incapacità di utilizzare le informazioni e le immagini relative contenute nel presente documento, se in base al contratto, torto, negligenza, responsabilità oggettiva o in caso contrario, anche se Microsoft o i suoi fornitori è stati avvertiti della possibilità di danni.

Serve aiuto?

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa a Microsoft Insider

Queste informazioni sono risultate utili?

Grazie per il feedback!

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×