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 mostra come caricare e scaricare file da un server remoto o locale in ASP.NET. Puoi scaricare i pacchetti di esempio dalle icone di download seguenti. Sono disponibili versioni in linguaggio C# e Visual Basic .NET del pacchetto di esempio.

Questo esempio di codice illustra come caricare e scaricare file da un server che non è nell'ambito del dominio di richiesta dell'utente. Sono disponibili funzionalità per il trasferimento di file con protocolli HTTP e FTP. Inoltre, questo esempio di codice usa URI (Uniform Resource Identifier) per identificare le posizioni dei file in un server. Le classi chiave utilizzate in questo esempio di codice sono la classe WebClient e la classe WebRequest.

Livello di difficoltà

            
            
             Livello di difficoltà medio

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 semplificati. La classe WebClient è una classe di alto livello che semplifica le interazioni con il server. Gli oggetti WebRequest vengono usati dalla classe WebClient per effettuare richieste. Le classi HttpWebRequest e FtpWebRequest sono implementazioni specifiche del protocollo della classe astratta 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 del 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 metodo DownloadData viene utilizzato con un oggetto FileStream per archiviare il flusso di dati in ingresso e scrivere la matrice di byte in un file locale.

Panoramica degli esempi

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

  • Caricamento remoto
  • Download remoto

Classe RemoteUpload

La classe RemoteUpload include due classi figlio. Queste classi sono HttpRemoteUpload e FtpRemoteUpload. Entrambe le classi usano il costruttore RemoteUpload. La classe RemoteUpload richiede una matrice di byte dei dati del file e un URI del server. È anche possibile specificare il nome da usare per il file caricato. La classe FtpRemoteUpload usa direttamente FtpWebRequest (invece di usare 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 = questo. FileData;
                using (WebClient client = new WebClient())
                {
                    cliente. Credentials = CredentialCache.DefaultCredentials;
                    cliente. intestazioni.Add("Tipo di contenuto", "application/x-www-form-urlencoded");
                    cliente. UploadData(questo. UrlString, "PUT", postData);
                }

                restituisce vero;
            }
            catch (eccezione ex)
            {
                throw new Exception("Caricamento non riuscito", es. InnerException);
            }

        }
    }

 classe pubblica FtpRemoteUpload : RemoteUpload
    {
        public FtpRemoteUpload(byte[], fileData, stringa, fileNamePath, stringa, urlString)
            : base(fileData, fileNamePath, urlString)
        {

        }

        public override bool UploadFile()
        {
            FtpWebRequest reqFTP;
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(this. Stringa di URL);
            reqFTP.KeepAlive = true;
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            reqFTP.UseBinary = true;
            reqFTP.ContentLength = questo. FileData.Length;

            int buffLength = 2048;
            byte[] buff = nuovo byte[buffLength];
            MemoryStream ms = new MemoryStream(this. FileData);

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

                restituisce vero;
            }
            catch (eccezione ex)
            {
                throw new Exception("Caricamento non riuscito", es. 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 di file fisico locale come parametri per creare l'oggetto.

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

Classe RemoteDownload

La classe RemoteDownload include anche due classi figlio. 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 di risposta dal server e quindi scrive questa matrice di byte in un FileStream. La classe FtpRemoteDownload usa direttamente FtpWebRequest (invece di usare 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(stringa, urlString, stringa, descFilePath)
            : base(urlString, descFilePath)
        {

        }

        public override bool DownloadFile()
        {
            string fileName = System.IO.Path.GetFileName(this. Stringa di URL);
            string descFilePathAndName =
                System.IO.Path.Combine(this. DescFilePath, fileName);
            provare
            {
                WebRequest myre = WebRequest.Create(this. Stringa di URL);
            }
            cattura
            {
                return false;
            }
            provare
            {
                byte[] fileData;
                using (WebClient client = new WebClient())
                {
                    fileData = client. DownloadData(questo. Stringa di URL);
                }
                using (FileStream fs =
                      new FileStream(descFilePathAndName, FileMode.OpenOrCreate))
                {
                    fs. Write(fileData, 0, fileData.Length);
                }
                restituisce vero;
            }
            catch (eccezione ex)
            {
                throw new Exception("campo di download", es. InnerException);
            }
        }
    }

classe pubblica FtpRemoteDownload : RemoteDownload
    {
        public FtpRemoteDownload(stringa, urlString, stringa, descFilePath)
            : base(urlString, descFilePath)
        {

        }

        public override bool DownloadFile()
        {
            FtpWebRequest reqFTP;

            string fileName = System.IO.Path.GetFileName(this. Stringa di URL);
            string descFilePathAndName =
                System.IO.Path.Combine(this. DescFilePath, fileName);

            provare
            {

                reqFTP = (FtpWebRequest)FtpWebRequest.Create(this. Stringa di URL);
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFTP.UseBinary = true;

                using (FileStream outputStream = new FileStream(descFilePathAndName, FileMode.OpenOrCreate))
                utilizzo di (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);
                    }
                }
                restituisce vero;
            }

            catch (eccezione ex)
            {
                throw new Exception("caricamento non riuscito", es. 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 progetto
Visual C# CSRemoteUploadAndDownload
Visual Basic.NET 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 altre informazioni sul metodo UploadData, visitare il seguente sito Web MSDN:

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

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

Informazioni generali sul metodo FtpWebRequest Per altre 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 selezionato, composto e documentato con cura 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 di framework di codice all-in-one

Per trovare altri esempi di All-In-One Code Framework, cercare "kbcodefx" insieme alle parole chiave correlate nel sito Web del supporto tecnico Microsoft. In alternativa, visita il seguente sito Web Microsoft:

Esempi di framework di codice all-in-one

Dichiarazione di non responsabilità per la pubblicazione rapida

Microsoft Corporation e/o i suoi rispettivi fornitori non rilasciano alcuna dichiarazione in merito all'idoneità, all'affidabilità o all'accuratezza delle informazioni e della grafica correlata contenute nel presente documento. Tutte queste informazioni e la relativa grafica sono fornite "così come sono" senza garanzie di alcun tipo. Microsoft e/o i suoi rispettivi fornitori con la presente declinano tutte le garanzie e le condizioni relative a queste informazioni e alla relativa grafica, comprese tutte le garanzie e le condizioni implicite di commerciabilità, idoneità per uno scopo particolare, perizia, titolo e non violazione. L'utente accetta espressamente che in nessun caso Microsoft e/o i suoi fornitori saranno responsabili per danni diretti, indiretti, morali, incidentali, speciali, consequenziali o danni di qualsiasi tipo, inclusi, senza limitazioni, danni per perdita di utilizzo, dati o profitti, derivanti da o in qualsiasi modo connessi all'uso o all'impossibilità di utilizzare le informazioni e la grafica correlata contenute nel presente documento, siano esse basate su contratto, illecito, negligenza, responsabilità oggettiva o altro, anche se Microsoft o uno dei suoi fornitori sono stati avvisati della possibilità di danni.