2012-05-26 3 views
1

Я добавляю функциональность на сайт, чтобы участники могли загружать собственные фотографии в свой профиль. Проблема, с которой я столкнулась, - это моя FTP-функция, которая отлично работает, когда я запускаю ее собственный localhost. Однако после того, как я разместил сайт на сервере GoDaddy и попытаюсь выполнить FTP, он не работает. Я получаюASP.NET C# FTP to GoDaddy

Невозможно подключиться к удаленному серверу

Вот мой код:

protected string savePath = Path.GetTempPath(); 
protected string saveThumbPath = Path.GetTempPath() + "/Thumb"; 
Guid g; 
protected void UploadButton_Click(object sender, EventArgs e) 
{ 
    bool worked = false; 
    if (FileUploadControl.HasFile) 
    { 
     try 
     { 
      g = Guid.NewGuid(); 
      string filename = Path.GetFileName(FileUploadControl.FileName); 
      Bitmap src = Bitmap.FromStream(FileUploadControl.PostedFile.InputStream) as Bitmap; 
      Bitmap thumb = Bitmap.FromStream(FileUploadControl.PostedFile.InputStream) as Bitmap; 

      // Resize the bitmap data 
      //Create the large image 
      Bitmap result = ProportionallyResizeBitmap(src, 800, 600); 
      //string saveName = Server.MapPath(savePath) + g + filename; 
      string saveName = savePath + g + filename; 
      result.Save(saveName, ImageFormat.Jpeg); 
      //Create the thumbnail 
      result = ProportionallyResizeBitmap(thumb, 200, 150); 
      //string saveThumbName = Server.MapPath(saveThumbPath) + g + filename; 
      string saveThumbName = saveThumbPath + g + filename; 
      result.Save(saveThumbName, ImageFormat.Jpeg); 

      StatusLabel.Text = "Upload status: File uploaded!"; 
      worked = true; 
      Thumbholder.Value = "Thumb" + g + filename; 
      Photoholder.Value = g + filename; 
// Get the object used to communicate with the server. 
//If the specified proxy is an HTTP proxy. only the DownloadFile, ListDirectory and ListDirectoryDetails commands are supported 

//get the object used to communicate with the server 
System.Net.FtpWebRequest request = System.Net.WebRequest.Create("ftp://mydomain/newcorvetteclub/Images/" + g + filename) as System.Net.FtpWebRequest; 
//this example assumes the FTP site uses anoymous login on 
//NetWorkCredentials provides credentials for password-based authentication such as digest, basic, NTLM 
request.Credentials = new System.Net.NetworkCredential("username", "password"); 

//Copy the contents of the file to the request stream 
byte[] fileContents = null; 
if (FileUploadControl.HasFile) 
{ 
    //fileContents = FileUploadControl.FileBytes; 
    fileContents = File.ReadAllBytes(saveName); 

} 
else 
{ 
    Response.Write("you need to provide a file"); 
    return; 
} 
request.Method = System.Net.WebRequestMethods.Ftp.UploadFile; 
request.ContentLength = fileContents.Length; 
//GetReequestStream: retrieves the stream used to upload data to an FTP server. 
Stream requestStream = request.GetRequestStream(); 
requestStream.Write(fileContents, 0, fileContents.Length); 
requestStream.Close(); 
System.Net.FtpWebResponse response = request.GetResponse() as System.Net.FtpWebResponse; 
//Response.Write("Upload file complete, status: " + response.StatusDescription); 
response.Close(); 
request = System.Net.WebRequest.Create("ftp://mydomain/newcorvetteclub/Images/Thumb" + g + filename) as System.Net.FtpWebRequest; 
request.Credentials = new System.Net.NetworkCredential("username", "password"); 
if (FileUploadControl.HasFile) 
{ 
    fileContents = File.ReadAllBytes(saveThumbName); 
} 
else 
{ 
    Response.Write("you need to provide a file"); 
    return; 
} 
request.Method = System.Net.WebRequestMethods.Ftp.UploadFile; 
request.ContentLength = fileContents.Length; 
//GetReequestStream: retrieves the stream used to upload data to an FTP server. 
requestStream = request.GetRequestStream(); 
requestStream.Write(fileContents, 0, fileContents.Length); 
requestStream.Close(); 
response = request.GetResponse() as System.Net.FtpWebResponse; 
//Response.Write("Upload file complete, status: " + response.StatusDescription); 

Еще одна странная вещь, что мой почтовый клиент делает что-то подобное. Он отлично работает, пока он запускается через localhost, но затем отключается, когда он запускается с серверов GoDaddy. Любая помощь будет принята с благодарностью.

+0

Я обновил его с помощью части изображения кода, я не уверен, какая строка его выбрасывает, так как она отлично работает при использовании отладчика – tuckerjt07

+0

@ agent-j, используемый им интерфейс «Bitmap» - это мелкая обертка вокруг GDI + , – Amy

+0

Какая строка бросает исключение? GDI + - это графическая библиотека окон и не имеет ничего общего с сетевой связью. – Amy

ответ

1

Я могу сказать вам, почему электронное письмо не проходит, вам нужно использовать «relay-hosting.secureserver.net» в качестве вашего SMTP-сервера. Что касается FTP, вы не можете сделать это на godaddy, они блокируют исходящие ftp. Я только что узнал об этом.

+0

Вы были верны, правильный способ добавления файлов to godaddy - использовать функцию .save и сохранить ее в пути к файлу, который они дают вам в разделе вашего аккаунта. – tuckerjt07

0

Проблема находится здесь, где вы используете один и тот же поток для обоих этих вызовов:

Bitmap src = Bitmap.FromStream(FileUploadControl.PostedFile.InputStream) as Bitmap; 
FileUploadControl.PostedFile.InputStream.Position = 0; // try this 
Bitmap thumb = Bitmap.FromStream(FileUploadControl.PostedFile.InputStream) as Bitmap; 

Streams имеют текущую позицию, и поэтому первый .FromStream вероятно читает весь поток, устанавливая положение поток до конца потока. Чтобы отменить это, вам необходимо сбросить его, установив stream.Position = 0.

+0

Я вставил строку, которую вы предложили, и теперь я не могу подключиться к сообщению удаленного сервера. Мне кажется странным, что это работает при запуске локально, с этой линией или без нее, но не работает после того, как они были отправлены на серверы GoDaddy. – tuckerjt07

+0

Попробуйте сохранить опубликованный файл на диск, затем прочитайте Bitmap с диска, а затем удалите файл из диск. У вас просто нет доступа к GDI + из GoDaddy (у меня нет опыта работы с их хостингом). –

+0

Это то, что я делаю, я выполняю все мои изменения в растровых изображениях, сохраняя этот файл в локальной папке temp, а затем считывая файл каталога Temp обратно в поток FtpWebRequest. – tuckerjt07