Thursday, March 31, 2011

ASP.NET C# upload MemoryStream content via FTPwebRequest issue

This should be pretty straight forward, and uploading works. BUT when I open the uploaded file on the FTP server it shows binary data which is just some weird characters that look like this [][][][], and its the right file size. how do I add attributes or headers that that will say that this file is an XML?

    public bool ProcessBatch(MemoryStream memStream)
    {
        bool result = true;
        FTPaddress = DistributionResources.ftpServer;
        CompleteFTPPath = DistributionResources.ftpPath;

        request = (FtpWebRequest)FtpWebRequest.Create(FTPaddress + CompleteFTPPath);
        request.Credentials = new NetworkCredential("username", "password");
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.UsePassive = true;
        request.UseBinary = true;
        request.KeepAlive = false;

        try
        {

            byte[] buffer = new byte[memStream.Length];

            memStream.Read(buffer, 0, buffer.Length);
            memStream.Close();

            using (Stream reqStream = request.GetRequestStream())
            {
                reqStream.Write(buffer, 0, buffer.Length);
            }

            //Gets the FtpWebResponse of the uploading operation
            response = (FtpWebResponse)request.GetResponse();
            Console.WriteLine(response.StatusDescription); //Display response

        }
        catch(Exception ex)
        {
            result = false;
        }

        return result;
    }

Thank you very much

From stackoverflow
  • Try not using request.UseBinary = true

    In other words, use request.UseBinary = false. Otherwise it will upload the contents as binary data, which is likely why you are seeing it show up that way on the server.

    For example, if you use the command line FTP client in windows, you have to explicitly type ascii before puting a text file. Same principle likely applies here.

    McLovin : Yes it is already set to true, u can see it in the code above. Thanks.
    Cory Foy : No, I meant set it to false. Setting it to true means to upload the contents as binary data - hence why you are seeing it as binary data on the server. I'll edit the answer to be clearer.
    McLovin : I've tried it with UseBinary set to false too, same exact effect. I went ahead and instead of using memory stream I've wrote it to the file and then FileStremed it, it works that way.

0 comments:

Post a Comment