2

JavaアプリケーションからFTPサーバーにファイルを転送しようとすると、プログラムは機能し、ファイルは転送されますが、FTOフォルダーで開くと、ファイルが破損しているため、ファイル中にパケットが失われると思います移行。なんで?そして、どうすればこれを修正できますか?

別の質問whileですが、ファイルのアップロードを停止したい場合、どうすれば停止できますか?

みんなありがとう!

私のクラス内のコード:

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

2 に答える 2

7

FAQをチェックしてください:

Q:転送後にファイルが破損するのはなぜですか?

A:これの最も一般的な原因は、ファイルがASCIIとして転送されているが、ファイルの内容がASCIIではなく、ファイルをBINARYとして転送する必要がある場合です。RFC 959は、デフォルトの転送モードはASCIIである必要があると述べています。FTPClientは標準に準拠しています。setFileType(FTP.BINARY_FILE_TYPE);を明示的に呼び出す必要があります。FTPサーバーにログインした後にバイナリ転送モードを要求します。

電話setFileType(FTP.BINARY_FILE_TYPE);

于 2011-01-19T04:23:03.047 に答える
2

FTPには、ASCII(通常はデフォルト)とバイナリの2つのモードがあります。テキスト以外のものを転送する場合は、クライアントをバイナリモードに設定する必要があります。

モードの設定方法はFTPクライアントの実装によって異なりますが、Commons IOについては、 http://commons.apache.org/net/api/org/apache/commons/net/ftp/FTPClient.html#setFileType (int )を参照してください。

于 2011-01-19T04:25:42.313 に答える