Como enviar e transferir ficheiros de um servidor remoto no ASP.NET

INTRODUÇÃO

Este artigo descreve uma amostra de tudo-em-um âmbito que está disponível para transferência. Este exemplo de código demonstra como enviar e transferir ficheiros a partir de um servidor remoto ou local no ASP.NET. Pode transferir os pacotes de amostra partir os seguintes ícones de transferência. O c# e Visual Basic .NET versões de idioma do pacote de exemplo estão disponíveis.


Este exemplo de código demonstra como enviar e transferir ficheiros a partir de um servidor que não seja no âmbito do domínio de pedido do utilizador. Funcionalidade é fornecida para transferir ficheiros com os protocolos HTTP e de FTP. Além disso, este exemplo de código utiliza Uniform Resource Identifiers (URI) para identificar as localizações dos ficheiros num servidor. As classes de chaves utilizadas neste exemplo de código são a classe do WebClient e a classe WebRequest .

Nível de dificuldade




alternate text

Informações de transferência

Para transferir este exemplo de código, clique das seguintes hiperligações:

Descrição geral técnica

É bastante fácil enviar e transferir ficheiros de um servidor remoto no ASP.NET. A biblioteca de classes do .NET Framework fornece alguns objectos simples pedido. A classe do WebClient é uma classe de alto nível que torna mais fácil a interacções do servidor. Objectos de WebRequest são utilizados pela classe WebClient para efectuar pedidos. As classes HttpWebRequest e FtpWebRequest são implementações de protocolo específico do resumo de classe de WebRequest . HttpWebRequest implementa os métodos GET e POST do protocolo HTTP para enviar e transferir ficheiros. FtpWebRequest implementa os métodos STOR e RETR do protocolo FTP para enviar e transferir ficheiros.


Este exemplo de código utiliza os métodos UploadData e DownloadData da classe WebClient para transferir dados para e de um URI do servidor remoto. O método UploadData é utilizado com o método PUT do protocolo HTTP e "aplicação/x-www-form-urlencoded" Internet de tipo de multimédia. O método DownloadData é utilizado com um objecto de FileStream para armazenar o fluxo de dados de entrada e escrever a matriz de bytes para um ficheiro local.

Descrição geral de exemplo

Este código de exemplo, encontrará o ficheiro de RemoteFileForm.aspx que explica como utilizar as seguintes duas novas classes:

  • RemoteUpload

  • RemoteDownload

A classe RemoteUpload

A classe de RemoteUpload tem duas classes subordinadas. Estas classes são HttpRemoteUpload e FtpRemoteUpload. Ambas as classes utilizam o construtor de RemoteUpload . A classe RemoteUpload requer uma matriz de bytes dos ficheiros dados e um URI do servidor. Também pode especificar o nome a utilizar para o ficheiro carregado. A classe FtpRemoteUpload utiliza FtpWebRequest directamente (em vez de utilizar a classe de WebClient de nível superior) para processar os requisitos específicos do protocolo FTP.


Consulte as seguintes definições de classe para obter mais informações sobre a 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);
}
}

} No ficheiro de RemoteFileForm.cs, quando clica no botão carregar , é criada uma instância do objecto RemoteUpload . Passar o URI do servidor e um caminho físico do ficheiro local como parâmetros para criar o objecto.


Nota Se não especificar um nome de ficheiro a utilizar para armazenar o ficheiro no servidor, o sistema gera automaticamente um nome de ficheiro em conformidade com a data e hora actuais no servidor. A data e hora é exacta para o milissegundo. Depois de concluir o método de UploadData , o resultado é apresentado na página actual.

A classe RemoteDownload

A classe RemoteDownload também tem duas classes subordinadas. Estas classes são HttpRemoteDownload e FtpRemoteDownload. A classe RemoteDownload requer um recurso URI e um directório físico local. A classe RemoteDownload verifica para se certificar de que o recurso URI existe antes da transferência é iniciado. A classe obtém a transmissão em sequência que contém os dados de resposta do servidor e, em seguida, escreve a matriz de bytes para um FileStream. A classe FtpRemoteDownload utiliza FtpWebRequest directamente (em vez de utilizar a classe de WebClient de nível superior) para processar os requisitos específicos do protocolo FTP.


Consulte as seguintes definições de classe para obter mais informações sobre a 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 Para mais informações sobre como criar e implementar a aplicação de exemplo, consulte o ficheiro Readme. txt incluído no pacote de transferência.


Idiomas

Este exemplo de código está disponível nas linguagens de programação seguintes:

Idioma

Nome do projecto

Visual c#

CSRemoteUploadAndDownload

Visual Basic.NET

VRemoteUploadAndDownload

Categoria de tecnologia

  • ASP.NET 2.0

  • ASP.NET 3.5

  • ASP.NET 4.0

Referências

Para mais informações sobre a classe do WebClient , visite o seguinte Web site da Microsoft para programadores (MSDN):

Informações gerais sobre a classe WebClientPara mais informações sobre o método de UploadData , visite o seguinte Web site da MSDN:

Informações gerais sobre o método de UploadDataPara mais informações sobre o método de DonwloadData , visite o seguinte Web site da MSDN:

Informações gerais sobre o método de DonwloadDataPara mais informações sobre o método de FtpWebRequest , visite o seguinte Web site da MSDN:

Informações gerais sobre o método de FtpWebRequestPara mais informações sobre como enviar ficheiros com o FTP, visite o seguinte Web site da MSDN:

Como enviar ficheiros com o FTP

Mais informações

O que é a estrutura de código tudo-em-um?

Tudo-em-um estrutura de código mostra a maior parte das técnicas de desenvolvimento da Microsoft através da utilização de exemplos de código em diferentes linguagens de programação. Cada exemplo cuidadosamente é seleccionado, composto e documentado para mostrar um cenário comum do código. Para mais informações sobre a estrutura de código tudo-em-um, visite o seguinte Web site da Microsoft:

http://1code.codeplex.com

Como localizar mais amostras de estrutura de código tudo-em-um

Para localizar mais amostras de estrutura de código tudo-em-um, procure "kbcodefx" com palavras-chave relacionadas no Microsoft Web site de suporte. Ou visite o seguinte Web site da Microsoft:

Amostras de estrutura de código tudo-em-um

Exclusão de responsabilidade publicação rápida

Empresa da Microsoft e/ou os respectivos fornecedores não fazem nenhuma afirmação sobre a adequação, fiabilidade ou a exactidão das informações e gráficos relacionados contidos no presente regulamento. Todas as informações e gráficos relacionados são fornecidos "tal como está" sem nenhum tipo de garantia. Microsoft e/ou os respectivos fornecedores não oferecem quaisquer garantias ou condições relativamente a estas informações fica e relacionados com gráficos, incluindo todas as garantias e condições implícitas de comercialização, adequação a um fim específico, negligência ou diligência esforço, título e não infracção. Especificamente concorda em que não Microsoft e/ou respectivos fornecedores serão responsáveis por quaisquer prejuízos directos, indirectos, PUNITIVOS, prejuízos especiais, CONSEQUENCIAIS ou quaisquer prejuízos, incluindo, sem limitação, danos por perda de utilização, dados ou lucros, resultantes ou de qualquer forma relacionados com a utilização ou incapacidade de utilizar as informações e gráficos relacionados contidos no presente regulamento, com base no contrato, facto prejudicial, negligência, responsabilidade objectiva ou não, mesmo que tenha sido Microsoft ou qualquer um dos seus fornecedores notificados da possibilidade de ocorrência de prejuízos.

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

×