I've got a problem by uploading a file using C#: When I m trying to upload a file which contains german Umlauts (ä, ö, ü) in its path and/or filename, I m getting an the FTP-error 553 "filename not allowed".
I can upload files without umlauts without any problems. I ve checked, if the encoding is correct and utf-8 is enabled on my FTP. I dont really want to change any file which contains umlauts, so I hope there is something I can do here.
When I m uploading my files via Filezilla, everything is fine. There are also no problem to download or get those files. Only uploading them causes an error.
This works fine:
ftp://ftp.myurl.com/mainfolder/folder/filename [id].png
This will give me error 553:
ftp://ftp.myurl.com/mainfolder/folder/filenäme [id].png
ftp://ftp.myurl.com/mainfolder/földer/filename [id].png
Here is my source code:
            string fullpath = ftp.url + folder + "/" + file.name;
            fullpath = fullpath.Replace("ä", "%C3%A4").Replace("ü", "%C3%BC").Replace("ö", "%C3%B6").Replace(" ","%20");
            Uri uri = new Uri(fullpath);
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
            request.UseBinary = true;
            request.KeepAlive = false;
            request.UsePassive = false;
            request.Timeout = 10000;
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.Credentials = new NetworkCredential(Data.user, Data.password);
            FileStream fs = new FileStream(file.fullname, FileMode.Open, FileAccess.Read);
            BinaryReader sourceStream = new BinaryReader(fs, Encoding.UTF8);
            Stream requestStream = request.GetRequestStream();
            byte[] chunk;
            chunk = sourceStream.ReadBytes(1024);
            int totalLength = 0;
            while (chunk.Length > 0)
            {
                requestStream.Write(chunk, 0, chunk.Length);
                totalLength += chunk.Length;
                chunk = sourceStream.ReadBytes(1024);
            }
            requestStream.Close();
            sourceStream.Close();
            request.ContentLength = totalLength;
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);
            response.Close();