Java: fichier de téléchargement de problème FTP (paquets perdus)
-
12-10-2019 - |
Question
Je suis en train de transférer un fichier de mon application Java sur un serveur FTP le fonctionnement du programme, le fichier est transféré, mais quand je vais ouvrir dans le dossier FTO, le fichier est corrompu, je pense que les paquets sont perdus lors du transfert de fichiers. Pourquoi? Et comment puis-je résoudre ce problème?
Une autre question, comment puis-je arrêter le while
si je veux arrêter le téléchargement de fichiers?
Merci tout le monde!
Le code dans ma classe:
FTPClient client = new FTPClient();
InputStream is = null;
//...
try{
client.connect(MY_FTP_URL);
client.login(USER, PASS);
InputStream is = new FileInputStream(file_path);
OutputStream os = client.storeFileStream(file_name);
byte[] buffer = new byte[1024];
int len;
//I use this way to check the transfer progress
while((len = is.read(buffer)) != -1){
os.write(buffer, 0, len);
os.flush();
}
os.close();
} catch (IOException e){
e.printStackTrace();
} finally{
try{
if(is != null){
is.close();
}
client.disconnect();
} catch(IOException e){
e.printStackTrace();
}
}
La solution
Consultez la FAQ :
Q: Pourquoi mes fichiers corrompus après transfert?
A: La cause la plus courante est lorsque le fichier est transféré en ASCII mais le contenu du fichier ne sont pas ASCII et le fichier doit être BINARY transférés. RFC 959 dit le mode de transfert par défaut devrait être ASCII. ClientFTP conforme à la la norme. Vous devez appeler explicitement setfiletype (FTP.BINARY_FILE_TYPE); à demander le mode de transfert binaire après la connexion au serveur FTP.
Appel setFileType(FTP.BINARY_FILE_TYPE);
Autres conseils
FTP a deux modes ASCII (généralement la valeur par défaut) et binaire. Si vous transférez tout autre texte, vous devez définir le client en mode binaire.
Comment régler le mode varie sur la mise en œuvre du client FTP, mais pour IO Commons voir http: //commons.apache .org / net / api / org / apache / communes / net / ftp / FTPClient.html # setfiletype (int )