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

Si applica a
ASP.NET on .NET Framework 3.5 Service Pack 1

INTRODUZIONE

Questo articolo descrive un esempio di framework All-In-One disponibile per il download. Questo esempio di codice illustra come caricare e scaricare file da un server remoto o locale in ASP.NET. È possibile scaricare i pacchetti di esempio dalle icone di download seguenti. Sono disponibili sia le versioni del linguaggio C# che di Visual Basic .NET del pacchetto di esempio.

Questo esempio di codice illustra come caricare e scaricare file da un server che non rientra nell'ambito del dominio di richiesta dell'utente. La funzionalità viene fornita per il trasferimento di file con i protocolli HTTP e FTP. Inoltre, questo esempio di codice usa gli URI (Uniform Resource Identifier) per identificare i percorsi dei file in un server. Le classi chiave usate in questo esempio di codice sono la classe WebClient e la classe WebRequest.

Livello di difficoltà

            
            
             3c8ced02-816a-199c-e0fb-d2469da22246

Informazioni sul download

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

Panoramica tecnica

È abbastanza facile caricare e scaricare file da un server remoto in ASP.NET. La libreria di classi .NET Framework fornisce alcuni oggetti richiesta leggeri. La classe WebClient è una classe di alto livello che semplifica le interazioni con il server. WebRequest oggetti vengono utilizzati dalla classe WebClient per effettuare richieste. Le classi HttpWebRequest e FtpWebRequest sono implementazioni specifiche del protocollo della classe Abstract WebRequest. 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.

Questo esempio di codice usa i metodi UploadData e DownloadData della classe WebClient per trasferire i dati da e verso un URI server remoto. Il metodo UploadData viene utilizzato con il metodo PUT del protocollo HTTP e il tipo di supporto Internet "application/x-www-form-urlencoded". Il DownloadData metodo viene utilizzato con un FileStream oggetto per archiviare il flusso di dati in ingresso e scrivere la matrice di byte in un file locale.

Panoramica di esempio

In questo codice di esempio è disponibile il file RemoteFileForm.aspx che spiega come usare le due nuove classi seguenti:

  • RemoteUpload
  • RemoteDownload

Classe RemoteUpload

La classe RemoteUpload ha due classi figlio. Queste classi sono HttpRemoteUpload e FtpRemoteUpload. Entrambe le classi utilizzano il costruttore RemoteUpload. La classe RemoteUpload richiede una matrice di byte dei dati dei file e un URI del server. È anche possibile specificare il nome da usare per il file caricato. La classe FtpRemoteUpload utilizza direttamente FtpWebRequest, anziché la classe WebClient di livello superiore, per gestire i requisiti specifici del protocollo FTP.

Per altre informazioni sulla classe RemoteUpload, vedere le definizioni di classe seguenti:
classe pubblica HttpRemoteUpload : RemoteUpload
    {
        public HttpRemoteUpload(byte[] fileData, string fileNamePath, string urlString)
            : base(fileData, fileNamePath, urlString)
        {

        }

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

                restituire true;
            }
            catch (Exception ex)
            {
                throw new Exception("Impossibile caricare", ad esempio InnerException);
            }

        }
    }

 classe pubblica 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);

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

                restituire true;
            }
            catch (Exception ex)
            {
                throw new Exception("Impossibile caricare", ad esempio 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 file fisico locale come parametri per creare l'oggetto.

Nota Se non si specifica un nome file da usare per archiviare il file sul server, il sistema genererà automaticamente un nome file in base alla data e all'ora correnti nel server. La data e l'ora sono accurate al millisecondo. Al termine del metodo UploadData, il risultato viene visualizzato nella pagina corrente.

Classe RemoteDownload

La classe RemoteDownload ha anche due classi per bambini. Queste classi sono HttpRemoteDownload e FtpRemoteDownload. La classe RemoteDownload richiede una risorsa URI e una directory fisica locale. La classe RemoteDownload verifica che la risorsa URI esista prima dell'avvio del download. La classe recupera il flusso che contiene i dati della risposta dal server e quindi scrive questa matrice di byte in un FileStream. La classe FtpRemoteDownload utilizza ftpWebRequest direttamente , invece di utilizzare la classe WebClient di livello superiore, per gestire i requisiti specifici del protocollo FTP.

Per altre informazioni sulla classe RemoteDownload, vedere le definizioni di classe seguenti:
 classe pubblica HttpRemoteDownload : RemoteDownload
    {
        public HttpRemoteDownload(string urlString, string descFilePath)
            : base(urlString, descFilePath)
        {

        }

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

classe pubblica 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);
            stringa descFilePathAndName =
                System.IO.Path.Combine(this. DescFilePath, fileName);

            provare
            {

                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 = risposta. 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);
                    }
                }
                restituire true;
            }

            catch (Exception ex)
            {
                throw new Exception("upload failed", ex. InnerException);
            }
        }
    }
Nota Per altre 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 progetto
Visual C# CSRemoteUploadAndDownload
Basic.NET visivo VRemoteUploadAndDownload

Categoria 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 WebClient Per ulteriori informazioni sul metodo UploadData, visitare il seguente sito Web MSDN:

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

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

Informazioni generali sul metodo FtpWebRequest Per ulteriori informazioni su come caricare Files con FTP, visitare il seguente sito Web MSDN:

Come caricare Files con FTP

Altre informazioni

Che cos'è All-In-One Code Framework?

All-In-One Code Framework mostra la maggior parte delle tecniche di sviluppo Microsoft utilizzando esempi di codice in diversi linguaggi di programmazione. Ogni esempio viene accuratamente selezionato, composto e documentato per mostrare uno scenario di codice comune. Per ulteriori informazioni su All-In-One Code Framework, visita il seguente sito Web Microsoft:

http://1code.codeplex.com

Come trovare altri esempi all-in-one code framework

Per trovare altri esempi all-in-one code framework, cercare "kbcodefx" insieme a parole chiave correlate sul sito Web di supporto Microsoft. In alternativa, visita il sito Web Microsoft seguente:

Esempi all-in-one code framework

Dichiarazione di non responsabilità per la pubblicazione rapida

Microsoft Corporation e/o i rispettivi fornitori non rilasciano dichiarazioni circa l'idoneità, l'affidabilità o l'accuratezza delle informazioni e degli elementi grafici correlati contenuti nel presente documento. Tutte le informazioni e gli elementi grafici correlati vengono forniti "così come sono" senza garanzie di alcun tipo. Microsoft e/o i rispettivi fornitori rifiutano tutte le garanzie e le condizioni relative a queste informazioni e agli elementi grafici correlati, incluse tutte le garanzie e le condizioni implicite di commerciabilità, idoneità per uno scopo specifico, lavoro, titolo e non violazione di diritti altrui. L'utente accetta specificamente che Microsoft e/o i suoi fornitori non saranno in alcun caso ritenuti responsabili per eventuali danni diretti, indiretti, punitivi, incidentali, speciali, consequenziali o danni di qualsiasi tipo, inclusi, a titolo esemplificativo, i danni per perdita di utilizzo, dati o profitti, derivanti o in qualsiasi modo connessi all'uso o all'impossibilità di utilizzare le informazioni e gli elementi grafici correlati contenuti nel presente documento, contratto, illecito civile, negligenza, responsabilità oggettiva o di altro tipo, anche nel caso in cui Microsoft o i suoi fornitori siano stati avvisati della possibilità di danni.