FTPClient - Java, télécharger le fichier
Je suis en train de faire une TRÈS simple de téléchargement de fichiers. Je veux un Java FTPClient qui peut télécharger n'importe quel fichier je te. Mais le pdf obtient toujours tout foiré et mon éditeur de pdf (Adobe) ne s'ouvrent pas, en disant: il y a une erreur d'e/S.
Je suis en utilisant la classe suivante:
import org.apache.commons.net.ftp.FTPClient;
....
FTPClient client = new FTPClient();
FileInputStream fis = null;
try {
client.connect("mydomain.com");
client.login("user", "password");
String filename = "myPDF.pdf";
fis = new FileInputStream(filename);
client.storeFile("temp.pdf", fis);
fis.close();
client.logout();
} catch (IOException e) {
e.printStackTrace();
}
Pourquoi n'est-ce pas le travail, et comment puis-je résoudre ce problème?
- Avez-vous essayé les réponses à votre question à partir d'une demi-heure? stackoverflow.com/questions/5925438/...
- ouais, je suis en utilisant un FTPClient maintenant. La question est complètement différent.
Vous devez vous connecter pour publier un commentaire.
Cela ne fonctionne pas car la valeur par défaut mode de transfert pour FTPClient est
FTP.ASCII_FILE_TYPE
. Vous avez juste besoin de mettre à jour la configuration de transfert en mode binaire.ftp.setFileType(FTP.BINARY_FILE_TYPE)
Ajouter ceci à votre fichier
J'ai eu le même problème avec les fichiers xlsx et c'était une bonne solution.
Il est souvent oublié que le protocole FTP a deux modes de fonctionnement - l'un pour les fichiers texte et l'autre pour le binaire (image) des fichiers. Dans le bon vieux temps, la connexion à partir d'une ligne de commande client ftp, nous avions soigneusement n'oubliez pas de définir le mode de transfert avant de demander un fichier ou nous atteindrions exactement le genre de problème que vous semblez avoir. Aujourd'hui, beaucoup de situations semblent par défaut en binaire, mais ne sont apparemment pas le vôtre.
Vous avez probablement besoin de dire à votre ftp de mise en œuvre de transfert en binaire/mode image.
Essayez d'utiliser BufferedInputStream, c'est une (de travail) exemple de code:
De la documentation
Donc fermer la FileInputStream avant d'appeler
logout()
De l'essayer.
Pour Moi seule http://ftp.setFileType(FTP.BINARY_FILE_TYPE, http://FTP.BINARY_FILE_TYPE) travaillé, alors que quand je l'utilise http://ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE Fichier a été d'obtenir endommagé.
Cela ressemble à un bug dans les Communes NET de la bibliothèque, ce qui a affecté la version 3.0. Essayez une version plus récente (3.0.1), qui fixe le bogue.