views:

391

answers:

0

I am trying to download a File from Remote Machine using FTP and Save as Dialog. I am able to Download '.txt' File with its Contents. However, the same code doesnt work with other file types('.bmp','.jpg','.doc', etc.). I am able to use the save as dialog to download these files but either contents are not displayed or files are Corrupted.

The Following is my code:-

FtpWebRequest ftp; try {

        FileStream outputStream = new FileStream(filePath + DwnLoadRename, FileMode.Create);
        ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftphost + "/" + DwnLoadRename)); //***------------------------>> ftphost = server ip***
        ftp.Method = WebRequestMethods.Ftp.DownloadFile;
        ftp.UseBinary = true;
        ftp.Credentials = new NetworkCredential(uName, password);
        FtpWebResponse response = (FtpWebResponse)ftp.GetResponse();
        Stream ftpstream = response.GetResponseStream();
        long clen = response.ContentLength;

        int iFileSize = Convert.ToInt32(FileSize); //***----->> FileSize = Size of the file in bytes(derived from database)***
        Byte[] bytBuffer = new byte[iFileSize];
        int readCount = ftpstream.Read(bytBuffer, 0, iFileSize);
        while (readCount > 0)
        {               
            outputStream.Read(bytBuffer, 0, (readCount));
            readCount = ftpstream.Read(bytBuffer, 0, iFileSize);

        }


        Response.Buffer = true;
        Page.Response.Clear();
        Page.Response.ClearHeaders();

        Page.Response.ClearContent();

        Page.Response.ContentType = Ctype; //***----------->> Ctype = ContentType(derived from the database)***
        Page.Response.Charset = "UTF-8";


        Page.Response.AddHeader("Content-Length", iFileSize.ToString());

        Page.Response.AddHeader("Content-Disposition", "attachment; filename=" + DwnLoadRename);


         Page.Response.BinaryWrite(bytBuffer);


        Page.Response.Flush();



        Page.Response.End();

        ftpstream.Close();
        outputStream.Close();
    }

    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }

Thanks In Advance...