2012-02-23 17 views
9

Ho bisogno di FTP un file in una directory. In .Net Devo usare un file nella cartella di destinazione per creare una connessione, quindi inserisco manualmente Blank.dat sul server usando FTP. Ho controllato l'accesso (ls -l) ed è -rw-r -r--. Ma quando tento di connettermi alla cartella FTP ottengo: "Il server remoto ha restituito un errore: (553) Nome file non consentito" indietro dal server. La ricerca che ho fatto dice che questo potrebbe arrecarsi da un problema di autorizzazioni ma come ho detto ho le autorizzazioni per visualizzare il file e posso eseguire ls dalla cartella. Quali altri motivi potrebbero causare questo problema e c'è un modo per connettersi alla cartella senza dover specificare un file?Impossibile connettersi a FTP: (553) Nome file non consentito

  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

Qual è il nome del file che si desidera inviare? – BlueM

+0

Hai controllato i permessi della cartella in cui vuoi inserire il file? Ti stai connettendo come proprietario di quella cartella? –

risposta

1

ho visto qualcosa di simile a questo un po 'indietro, si è rivelato essere il fatto che stavo cercando di connettersi a un server FTP di IIS interno che è stato assicurato tramite Active Directory.

Nella mia credenziali di rete stavo usando nuovo NetworkCredential (@ "dominio \ utente", "password"); e quello stava fallendo. Passare a nuovo NetworkCredential ("utente", "password", "dominio"); ha funzionato per me

+0

Questo non sta usando AD. È un nome utente e una password semplici su un server FTP UNIX. Ma per Kicks ho cercato di entrare nel dominio e ho ricevuto un errore di registrazione, quindi non è questo il problema, ma grazie per l'input. – NomadicDeveloper

24

Anche se rispondere a un vecchio post ha pensato che potesse aiutare qualcuno.

Quando si crea l'URL ftp, assicurarsi di non includere la directory predefinita per quel login.

ad esempio questo è stato il percorso che mi è stato la specifica e mi è stato sempre l'eccezione 553 FileName non ammessi eccezione

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

L'account di accesso che ho usato era l'oro directory predefinita/central_p2.so l'url fornito diventato invalido poiché stava cercando di individuare l'intero percorso nella directory predefinita. Ho modificato di conseguenza la mia stringa di URL e sono riuscito a sbarazzarmi dell'eccezione.

mio URL modificato sembrava

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

Grazie,

Sab

+4

Santo schifo! Mi sento di mandarti dei fiori per questo! –

+2

Solo per aggiungere qualcosa: se vuoi ancora utilizzare un percorso assoluto (preferisco che, poiché a volte accedo a un altro utente e un percorso relativo non funziona), puoi inserire due "//" dopo l'host. Come ftp: //myftpip//gold/central_p2/inbound/article_list/jobs/abc.txt – YuviDroid

+0

Come faccio a sapere qual è la directory predefinita? – Steam

6

Questo può aiutare per server Linux FTP.

Quindi, i server FTP Linux a differenza di IIS non hanno una directory root FTP comune. Invece, quando si accede al server FTP con le credenziali dell'utente, viene utilizzata la directory principale dell'utente. Quindi la gerarchia delle directory FTP inizia da/root/per utente root e da/home/username per gli altri.

Pertanto, se è necessario eseguire una query su un file non relativo alla directory principale dell'account utente, ma relativa alla directory principale del file system, aggiungere un nome server aggiuntivo/successivo. Con conseguente URL assomiglierà:

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

È necessario essere cauti con i nomi ei percorsi:

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

se si sta inviando a ftp.computersoft.com/JohnSmith un file caled text1.txt situato a d:/testi/temp

poi

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(); 

preavviso che a un certo momento si utilizza come destinazione

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

che contiene non solo directory, ma il nuovo nome del file anche sul server FTP (che in generale può essere diverso dal nome del file sul disco rigido)

e in altro luogo si utilizza come fonte

D: /Texts/Temp/text1.txt

2

vostra directory ha limite di accesso.
eliminare la directory e quindi creare di nuovo con questo codice:

//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

Non so cosa fosse sbagliato, funzionava in tutti questi giorni e all'improvviso si stava verificando l'errore 553, ho appena cancellato e ricreato le cartelle e ha ripreso a funzionare. –

0

Anche se è un posto più grande ho pensato che sarebbe stato bello condividere la mia esperienza. Sono venuto di fronte allo stesso problema, ma l'ho risolto io stesso. I due principali motivi di questo problema è Errore nel percorso (se le tue autorizzazioni sono corrette) accade quando il tuo percorso ftp è sbagliato. Senza vedere il tuo percorso è impossibile dire cosa c'è che non va, ma bisogna ricordare le cose 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

Un altro motivo per questo errore potrebbe essere che il server FTP è case sensitive. Mi ci è voluto bene per capire.