FtpWebRequest Télécharger Le Ficher
Le code suivant est destiné à récupérer un fichier via FTP. Cependant, j'obtiens une erreur avec elle.
serverPath = "ftp://x.x.x.x/tmp/myfile.txt";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverPath);
request.KeepAlive = true;
request.UsePassive = true;
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(username, password);
//Read the file from the server & write to destination
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) //Error here
using (Stream responseStream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(responseStream))
using (StreamWriter destination = new StreamWriter(destinationFile))
{
destination.Write(reader.ReadToEnd());
destination.Flush();
}
L'erreur est:
Le serveur distant a retourné une erreur: (550) Fichier indisponible (par exemple, fichier non trouvé, pas d'accès)
Le fichier certainement n'existe pas sur la machine distante, et je suis en mesure d'effectuer cette ftp manuellement (c'est à dire que j'ai des autorisations). Quelqu'un peut me dire pourquoi j'ai peut-être cette erreur?
- Je trouve wireshark utile pour des trucs comme ça. Vous pouvez configurer un filtre pour afficher le trafic FTP entre votre machine et le serveur.
- Qu'advient-il si vous définissez UsePassive pour de faux? Je n'ai jamais eu aucun travail de serveur en utilisant le mode passif..
- Généralement la cause d'une erreur de délai, dans mon expérience, comme il essaie d'utiliser un port bloqué par le pare-feu.
- Eh bien, c'est aussi loin que mes connaissances en va, le reste du code semble bien pour moi.
Vous devez vous connecter pour publier un commentaire.
Ce paragraphe à partir de la FptWebRequest de référence de classe pourraient être d'intérêt pour vous:
Je sais que c'est un vieux Post mais je suis ajoutant ici pour référence future. Voici une solution que j'ai trouvé:
Mise à jour basé sur une excellente suggestion par Ilya Kogan
using
.WebClient
, plutôt que de laFtpWebRequest
, vous pouvez utiliser sesDownloadFile
de la méthode, plutôt que de jouer avec unFileStream
, qui pourrait être un peu plus facile. Il ya certaines choses que WebClient ne pouvez pas le faire, même si (comme l'utilisationACTV
plutôt quePASV
FTP:FtpWebRequest.UsePassive = false;
)Façon la plus simple
Le plus trivial moyen de télécharger un fichier binaire à partir d'un serveur FTP à l'aide .NET framework est à l'aide de
WebClient.DownloadFile
:Options avancées
Utilisation
FtpWebRequest
, seulement si vous avez besoin d'un plus grand contrôle, quiWebClient
n'offre pas (comme TLS/SSL de cryptage, suivi d'avancement, etc). Moyen facile est de simplement copier un FTP flux de réponse àFileStream
à l'aide deStream.CopyTo
:De suivi des progrès
Si vous avez besoin de surveiller la progression du téléchargement, vous devez copier le contenu que par morceaux vous-même:
Pour l'interface graphique de progression (WinForms
ProgressBar
), voir:FtpWebRequest téléchargement FTP avec ProgressBar
Téléchargement dossier
Si vous voulez télécharger tous les fichiers d'un dossier distant, voir
C# Télécharger tous les fichiers et sous-répertoires via FTP.
Stream.CopyTo
utilise une mémoire tampon de 80 KO.J'ai eu le même problème!
Ma solution a été d'insérer le
public_html
dossier dans l'URL de téléchargement.Réel de l'emplacement du fichier sur le serveur:
Web URL:
J'espère que cela peut vous aider.
Après cela, vous pouvez utiliser la ligne ci-dessous afin d'éviter toute erreur..(accès refusé etc.)