FTP Upload using FtpWebRequest problem PLEASE HELP

S

SevDer

Hi,

I am trying to write a simple application which copies the predefined
files (hardcoded in the code) to my ftp server.

I couldn't make it working. I don't want to use any 3rd party
components, because I want to learn. (I am using .NET Framework 2.0, but
I don't think my problem is because of 2.0)

########################################
My code fails at line:
Stream requestStream = myFtpRequest.GetRequestStream();

########################################
And the error message is as follows:
The remote server returned an error: (550) Requested action not taken.
File unavailable (e.g., file not found, no access)..

The file that I want to upload may or may not exist in the
destionation. (For testing I put it there also, but didn't work)

########################################
The method I am using is as follows (got it from MSDN help files)

public static bool UploadToFTP()
{
// The URI described by serverUri should use the ftp:// scheme.
// It contains the name of the file on the server.
// Example: ftp://contoso.com/someFile.txt.
//
// The fileName parameter identifies the file containing
the data to be uploaded.
Uri sevderComFtp = new
Uri("ftp://sevder.com/mysubfolder/myfiletoupload.ext");

string assemblyPath = @"C:\my folder\sub
folder\myfiletoupload.ext";

if (sevderComFtp.Scheme != Uri.UriSchemeFtp)
{
return false;
}

// Get the object used to communicate with the server.
FtpWebRequest myFtpRequest =
(FtpWebRequest)WebRequest.Create(sevderComFtp);
myFtpRequest.Method = FtpMethods.UploadFile;
myFtpRequest.Credentials = new
NetworkCredential("username", "password");

// Don't set a time limit for the operation to complete.
myFtpRequest.Timeout = System.Threading.Timeout.Infinite;

// Copy the file contents to the request stream.
const int bufferLength = 2048;
byte[] buffer = new byte[bufferLength];

int count = 0;
int readBytes = 0;
FileStream stream = File.OpenRead(assemblyPath);


Stream requestStream = myFtpRequest.GetRequestStream();

do
{
readBytes = stream.Read(buffer, 0, bufferLength);
requestStream.Write(buffer, 0, bufferLength);
count += readBytes;
}
while (readBytes != 0);

Console.WriteLine("Writing {0} bytes to the stream.", count);
// IMPORTANT: Close the request stream before sending the
request.
requestStream.Close();

FtpWebResponse response =
(FtpWebResponse)myFtpRequest.GetResponse();
Console.WriteLine("Upload status: {0}", response.Status);

response.Close();
return true;
}
########################################
 
J

jamjar

SevDer said:
Hi,

I am trying to write a simple application which copies the predefined
files (hardcoded in the code) to my ftp server.

I couldn't make it working. I don't want to use any 3rd party
components, because I want to learn. (I am using .NET Framework 2.0, but
I don't think my problem is because of 2.0)

########################################
My code fails at line:
Stream requestStream = myFtpRequest.GetRequestStream();

########################################
And the error message is as follows:
The remote server returned an error: (550) Requested action not taken.
File unavailable (e.g., file not found, no access)..

The file that I want to upload may or may not exist in the
destionation. (For testing I put it there also, but didn't work)

########################################
The method I am using is as follows (got it from MSDN help files)

public static bool UploadToFTP()
{
// The URI described by serverUri should use the ftp:// scheme.
// It contains the name of the file on the server.
// Example: ftp://contoso.com/someFile.txt.
//
// The fileName parameter identifies the file containing
the data to be uploaded.
Uri sevderComFtp = new
Uri("ftp://sevder.com/mysubfolder/myfiletoupload.ext");

string assemblyPath = @"C:\my folder\sub
folder\myfiletoupload.ext";

if (sevderComFtp.Scheme != Uri.UriSchemeFtp)
{
return false;
}

// Get the object used to communicate with the server.
FtpWebRequest myFtpRequest =
(FtpWebRequest)WebRequest.Create(sevderComFtp);
myFtpRequest.Method = FtpMethods.UploadFile;
myFtpRequest.Credentials = new
NetworkCredential("username", "password");

// Don't set a time limit for the operation to complete.
myFtpRequest.Timeout = System.Threading.Timeout.Infinite;

// Copy the file contents to the request stream.
const int bufferLength = 2048;
byte[] buffer = new byte[bufferLength];

int count = 0;
int readBytes = 0;
FileStream stream = File.OpenRead(assemblyPath);


Stream requestStream = myFtpRequest.GetRequestStream();

do
{
readBytes = stream.Read(buffer, 0, bufferLength);
requestStream.Write(buffer, 0, bufferLength);
count += readBytes;
}
while (readBytes != 0);

Console.WriteLine("Writing {0} bytes to the stream.", count);
// IMPORTANT: Close the request stream before sending the
request.
requestStream.Close();

FtpWebResponse response =
(FtpWebResponse)myFtpRequest.GetResponse();
Console.WriteLine("Upload status: {0}", response.Status);

response.Close();
return true;
}
########################################

The only thing i can think of is that the FTP server has not logged in
before you are trying to request your file.

As a test try putting in
System.Threading.Sleep(5000);

before you start your Stream requestStream =
myFtpRequest.GetRequestStream();

Piotr Stulinski.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top