Olá pessoal,
Tenho um sistema web, desenvolvido em C# e Aspx que se conecta com um server FTP. Nesse server tenho uns arquivos, e gostaria que o usuário que acessa o sistema conseguisse fazer o download desses arquivos.
Eu consegui gerar uma página que lista os arquivos que estão no servidor, e consegui que fosse feito o download desse arquivo. Porém, eu gostaria que o download fosse feito de forma diferente, invés do arquivo ir direto ao diretório já determinado no código, gostaria que o usuário escolhesse onde salvar, como qualquer download que se faz na internet.
Se fosse um download que fosse feito direto do servidor eu conseguia, mas como é de um servidor FTP, não sei porque, mas não está indo de jeito algum.
Já tentei de várias formas, mas ainda não consegui nada.
Segue abaixo meu código, se tiverem alguma dica pra melhora-lo também eu agradeço:
Listar Arquivos
protected void Page_Load(object sender, EventArgs e)
{
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpIP + "/");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential(ftpUser, ftpPass);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;
FtpWebResponse response = request.GetResponse() as FtpWebResponse;
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
while (!reader.EndOfStream)
{
string item = reader.ReadLine();
lstArquivos.Items.Add(item);
}
reader.Close();
responseStream.Close();
response.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Download do Arquivo Listado
try
{
nomeArquivo = lstArquivos.SelectedValue;
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpIP + "/" + nomeArquivo);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(ftpUser, ftpPass);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
byte[] buffer = new byte[2048];
FileStream newFile = new FileStream("c:\\"+nomeArquivo, FileMode.Create); //Aqui invés de ir ao diretório especificado, gostaria que o usuário escolhesse o lugar
int readCount = responseStream.Read(buffer, 0, buffer.Length);
while (readCount > 0)
{
newFile.Write(buffer, 0, readCount);
readCount = responseStream.Read(buffer, 0, buffer.Length);
}
newFile.Close();
responseStream.Close();
response.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Obrigado e aguardo um help…