2012-02-23 150 views
9

Necesito FTP un archivo a un directorio. En .Net tengo que usar un archivo en la carpeta de destino para crear una conexión, así que coloco Blank.dat en el servidor usando FTP. Revisé el acceso (ls -l) y es -rw-r - r--. Pero cuando intento conectarme a la carpeta FTP, aparece: "El servidor remoto devolvió un error: (553) No se permitió el nombre de archivo" desde el servidor. La investigación que he realizado dice que esto puede surgir de un problema de permisos, pero como he dicho, tengo permisos para ver el archivo y puedo ejecutar ls desde la carpeta. ¿Qué otras razones podrían causar este problema y hay una forma de conectarse a la carpeta sin tener que especificar un archivo?No se puede conectar a FTP: (553) Nombre de archivo no permitido

  byte[] buffer; 
      Stream reqStream; 
      FileStream stream; 
      FtpWebResponse response; 
      FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(string.Format("ftp://{0}/{1}", SRV, DIR))); 
      request.Method = WebRequestMethods.Ftp.UploadFile; 
      request.Credentials = new NetworkCredential(UID, PASS); 
      request.UseBinary = true; 
      request.Timeout = 60000 * 2; 
      for (int fl = 0; fl < files.Length; fl++) 
      { 
       request.KeepAlive = (files.Length != fl); 
       stream = File.OpenRead(Path.Combine(dir, files[fl])); 
       reqStream = request.GetRequestStream(); 
       buffer = new byte[4096 * 2]; 
       int nRead = 0; 
       while ((nRead = stream.Read(buffer, 0, buffer.Length)) != 0) 
       { 
        reqStream.Write(buffer, 0, nRead); 
       } 
       stream.Close(); 
       reqStream.Close(); 

       response = (FtpWebResponse)request.GetResponse(); 
       response.Close(); 
      } 
+1

¿Cuál es el nombre de archivo del archivo que desea enviar? – BlueM

+0

¿Revisaste los permisos de la carpeta en la que querías poner el archivo? ¿Te estás conectando como propietario de esa carpeta? –

Respuesta

1

vi algo similar a esto un tiempo atrás, que resultó ser el hecho de que yo estaba tratando de conectarse a un servidor FTP de IIS interno que fue asegurada mediante Active Directory.

En mis credenciales de red estaba usando una nueva NetworkCredential (@ "dominio \ usuario", "contraseña"); y eso estaba fallando Cambiar a la nueva NetworkCredential ("usuario", "contraseña", "dominio"); trabajó para mi.

+0

Esto no está usando AD. Es un simple nombre de usuario y contraseña en un servidor FTP de UNIX. Pero para Kicks intenté ingresar al dominio y recibí un error de registro, por lo que ese no es el problema, pero gracias por la entrada. – NomadicDeveloper

24

Aunque respondiendo a una publicación anterior solo pensé que podría ayudar a alguien.

Cuando crea su url de ftp, asegúrese de no incluir el directorio predeterminado para ese inicio de sesión.

por ejemplo, este fue el camino que yo estaba especificar y que estaba recibiendo la excepción 553 Nombre de archivo no permitido excepción

ftp://myftpip/gold/central_p2/inbound/article_list/jobs/abc.txt 

El inicio de sesión que utilicé tenía el oro directorio por defecto/central_p2.so la URL que se convirtió en no válido, ya que estaba tratando de localizar toda la ruta en el directorio predeterminado. Enmendé mi cadena de URL en consecuencia y pude deshacerme de la excepción.

mi URL modificado parecía

ftp://myftpip/inbound/article_list/jobs/abc.txt 

Gracias,

Sab

+4

¡Santa mierda! ¡Tengo ganas de enviarte flores para esto! –

+2

Solo para agregar algo: si todavía quiere usar una ruta absoluta (prefiero eso, dado que a veces inicio sesión usando un usuario diferente y una ruta relativa no funcionará), puede poner dos "//" después del host. Me gusta ftp: //myftpip//gold/central_p2/inbound/article_list/jobs/abc.txt – YuviDroid

+0

¿Cómo puedo saber cuál es el directorio predeterminado? – Steam

6

Esto puede ayudar para el servidor FTP de Linux.

Por lo tanto, los servidores FTP de Linux a diferencia de IIS no tienen un directorio raíz FTP común. En cambio, cuando inicia sesión en el servidor FTP con algunas credenciales de usuario, se utiliza el directorio raíz de este usuario. Así que la jerarquía del directorio FTP comienza desde/root/para el usuario root y desde/home/username para los demás.

Por lo tanto, si necesita consultar un archivo no relativo al directorio de inicio de la cuenta de usuario, pero en relación con la raíz del sistema de archivos, agregue un nombre de servidor extra/posterior. URL resultante se verá como:

ftp://servername.net//var/lalala 
0

Hay que tener cuidado con los nombres y trayectorias:

string FTP_Server = @"ftp://ftp.computersoft.com//JohnSmith/"; 
string myFile="text1.txt"; 
string [email protected]"D:/Texts/Temp/"; 

si va a enviar a ftp.computersoft.com/JohnSmith un archivo caled texto1.txt situada en d:/textos/temp

continuación

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(FTP_Server+myFile); 
    request.Method = WebRequestMethods.Ftp.UploadFile;      

    request.Credentials = new NetworkCredential(FTP_User, FTP_Password);  

    StreamReader sourceStream = new StreamReader(TempDir+myFile);     
    byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); 
    sourceStream.Close(); 

    Stream requestStream = request.GetRequestStream(); 
    requestStream.Write(fileContents, 0, fileContents.Length);    
    requestStream.Close(); 

aviso de que en un momento se utiliza como destino

ftp://ftp.computersoft.com//JohnSmith/text1.txt

que contiene no solo directorio, pero el nuevo nombre de archivo en el servidor FTP también (que en general puede ser diferente al nombre del archivo en su disco duro)

y en otro lugar se utiliza como fuente de

D: /Texts/Temp/text1.txt

2

su directorio tiene límite de acceso.
borrar el directorio y luego crear de nuevo con este código:

//create folder 
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://mpy1.vvs.ir/Subs/sub2"); 
request.Method = WebRequestMethods.Ftp.MakeDirectory; 
request.Credentials = new NetworkCredential(username, password); 
request.UsePassive = true; 
request.UseBinary = true; 
request.KeepAlive = true ; 
using (var resp = (FtpWebResponse)request.GetResponse()) 
{ 

} 
+0

No estoy seguro de lo que estaba mal, estaba trabajando todos estos días y de repente estaba obteniendo el error 553, simplemente borré y volví a crear las carpetas y comenzó a funcionar nuevamente. –

0

Aunque es un puesto de mayor pensé que sería bueno compartir mi experiencia. Me enfrenté al mismo problema, sin embargo lo resolví yo mismo. Las 2 razones principales de este problema es Error en la ruta (si sus permisos son correctos) que ocurre cuando su ruta ftp es incorrecta. Sin ver su ruta, es imposible decir qué está mal, pero hay que recordar las cosas a. Unlike browser FTP doesn't accept some special characters like ~ b. If you have several user accounts under same IP, do not include username or the word "home" in path c. Don't forget to include "public_html" in the path (normally you need to access the contents of public_html only) otherwise you may end up in a bottomless pit

0

Otra razón para este error podría ser que el servidor FTP distingue entre mayúsculas y minúsculas. Eso me tomó mucho tiempo para entenderlo.

Cuestiones relacionadas