Upload a file to an FTP server from a string or stream
17,895
Just copy your stream to the FTP request stream:
Stream requestStream = ftpRequest.GetRequestStream();
stream.CopyTo(requestStream);
requestStream.Close();
For a string (assuming the contents is a text):
byte[] bytes = Encoding.UTF8.GetBytes(data);
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
}
Or even better use the StreamWriter
:
using (Stream requestStream = request.GetRequestStream())
using (StreamWriter writer = new StreamWriter(requestStream, Encoding.UTF8))
{
writer.Write(data);
}
If the contents is a text, you should use the text mode:
request.UseBinary = false;
Author by
Jamie Twells
I'm a .NET Web Developer but I also enjoy Typescript and React.
Updated on July 06, 2022Comments
-
Jamie Twells almost 2 years
I'm trying to create a file on an FTP server, but all I have is either a string or a stream of the data and the filename it should be created with. Is there a way to create the file on the server (I don't have permission to create local files) from a stream or string?
string location = "ftp://xxx.xxx.xxx.xxx:21/TestLocation/Test.csv"; WebRequest ftpRequest = WebRequest.Create(location); ftpRequest.Method = WebRequestMethods.Ftp.UploadFile; ftpRequest.Credentials = new NetworkCredential(userName, password); string data = csv.getData(); MemoryStream stream = csv.getStream(); //Magic using (var response = (FtpWebResponse)ftpRequest.GetResponse()) { }
-
Martin Prikryl over 7 yearsThat's not a generic solution. You convert the contents to UTF-8. So it can work with text files only. And you didn't state this limitation. Moreover, using a binary mode for text files does not seem right.