andrea
andrea

Reputation: 1358

Ftp uploaded files are corrupted unless "txt" files c#

I'm using an FTP server in c# and I have to upload files of different typer (.png, .xlsx, docx....), at the moment the upload is done for every file type, but if I try to open a file (except for .txt) it says that the file is corrupted. what am I doing wrong?

thank you

    FtpWebResponse response = null;
    try
    {
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
        if (request == null)
        {
            result.SetError(Translate.InvalidUrl, url);
            return false;
        }
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.UseBinary = true;

        request.Credentials = new NetworkCredential(username, password);

        if (sourceStream == null)
        {
            result.SetError(Translate.FileErrorReading);
            return false;
        }
        byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
        sourceStream.Close();

        request.ContentLength = fileContents.Length;

        Stream requestStream = request.GetRequestStream();
        requestStream.Write(fileContents, 0, fileContents.Length);
        requestStream.Close();

        response = (FtpWebResponse)request.GetResponse();

        result.SetInformation(Translate.FileSuccefullUpload, filename);

    }
    catch (Exception e)
    {
        result.SetError(e.Message);
        return false;
    }
    finally
    {
        if (response != null)
            response.Close();
    }
    return result.Successful;
    }

Upvotes: 2

Views: 1075

Answers (2)

Stefano Altieri
Stefano Altieri

Reputation: 4628

Why are you using Encoding.UTF8.GetBytes?

This trim bytes.

You should read your data in binary mode (i.e. File.ReadAllBytes).

Upvotes: 6

koljaTM
koljaTM

Reputation: 10262

Check whether you use ASCII or BINARY transfer mode.

Upvotes: 0

Related Questions