Загрузка папки в подпапку ftp возвращает файл ошибки (550), нет доступа, нет доступа - PullRequest
2 голосов
/ 06 декабря 2010

Я пытаюсь загрузить изображения на FTP. Мне нужно, чтобы он был в сжатой папке с конкретным именем, а затем загрузить эту папку в определенный каталог. Каждый раз, когда я пытаюсь получить сообщение об ошибке, удаленный сервер возвращает ошибку: (550) файл недоступен Этот код работает нормально, когда я пытаюсь загрузить одно изображение за раз. Здесь я пытаюсь загрузить целую папку. Я проверил URI (я скопировал его из отладки), и он пошел туда просто отлично. Есть ли другой способ загрузки папок? Я думал, что это проблема с правами на запись, но я могу вручную войти и загрузить папку в нужное место. Затем я попытался получить список каталогов, который я могу. Я также не могу загрузить папку в корень. Я довольно отчаянно! Я даже не знаю, где Google!

 string ftpPassword = ConfigurationManager.AppSettings["ftpPassword"].ToString();
  string uri = remoteDirectory;
  FileInfo fileInf = new FileInfo(FileToUpload);
  // Create FtpWebRequest object from the Uri provided
  FtpWebRequest reqFTP = null;
  reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
  reqFTP.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
  reqFTP.KeepAlive = false;
  reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
  // Specify the data transfer type.
  reqFTP.UseBinary = true;
  // Notify the server about the size of the uploaded file
  reqFTP.ContentLength = fileInf.Length;
  // The buffer size is set to 2kb
  int buffLength = 2048;
  byte[] buff = new byte[buffLength];
  int contentLen;
  // open file to be uploaded
  using (FileStream fs = fileInf.OpenRead())
  {
  try
  {
  // Stream to which the file to be upload is written
  using (Stream strm = reqFTP.GetRequestStream())
  {
  // Read from the file stream 2kb at a time till Stream content ends
  contentLen = fs.Read(buff, 0, buffLength);
  while (contentLen != 0)
  {
  // Write Content from the file stream to the FTP Upload Stream
  strm.Write(buff, 0, contentLen);
  contentLen = fs.Read(buff, 0, buffLength);
  }
  }
  reqFTP = null;
  ////Update the database with the new image location and delete the img from the uploadedimages folder
  //DataAccess.UpdateImageDB(item.ProductID, item.ImgFolder + "/" + item.IMG);
  System.IO.File.Delete(fileInf.ToString());
  }
  {
  Console.WriteLine(ex.Message, "Upload Error");
  }

Ответы [ 3 ]

0 голосов
/ 12 августа 2011

Мне пришлось войти в разрешения NTFS и добавить IUSR с «полным контролем» в папку ftp.

0 голосов
/ 07 ноября 2013

Чтобы решить эту проблему, необходимо заставить команду System.Net.FtpWebRequest вернуться к старому поведению того, как она работала в .Net Framework 2.0 / 3.5, и выполнить дополнительную команду CWD перед выполнением фактическая команда.

Чтобы сделать это, перед вызовом любого экземпляра класса System.Net.FtpWebRequest необходимо разместить следующий код. Приведенный ниже код необходимо вызывать только один раз, поскольку он изменяет настройки всего домена приложения.

private static void SetMethodRequiresCWD()
{
    Type requestType = typeof(FtpWebRequest);
    FieldInfo methodInfoField = requestType.GetField("m_MethodInfo", BindingFlags.NonPublic | BindingFlags.Instance);
    Type methodInfoType = methodInfoField.FieldType;


    FieldInfo knownMethodsField = methodInfoType.GetField("KnownMethodInfo", BindingFlags.Static | BindingFlags.NonPublic);
    Array knownMethodsArray = (Array)knownMethodsField.GetValue(null);

    FieldInfo flagsField = methodInfoType.GetField("Flags", BindingFlags.NonPublic | BindingFlags.Instance);

    int MustChangeWorkingDirectoryToPath = 0x100;
    foreach (object knownMethod in knownMethodsArray)
    {
        int flags = (int)flagsField.GetValue(knownMethod);
        flags |= MustChangeWorkingDirectoryToPath;
        flagsField.SetValue(knownMethod, flags);
    }
}

http://support.microsoft.com/kb/2134299

0 голосов
/ 06 декабря 2010

Возможно, вам нужно проверить, существует ли каталог (папка), а если нет, то вам нужно создать его на FTP.Я уверен, что большинство FTP-клиентов делают это для вас.

...