2017-11-20 4 views
0

アップロードするファイルがあります(たとえばabc.pdf)。初めてこのファイルを一時ファイル(たとえばabc.pdf.temp)としてアップロードしたいと考えています。その後、ファイルが正常に転送された場合(完全に転送された場合)、名前を元の名前(abc.pdf)に変更する必要があります。しかし、ファイルが完全に転送されていない場合、最初にアップロードした一時ファイルを削除する必要があります。これは、サーバーに破損したファイルを保存したくないからです。これは、このJSchライブラリを使用して達成することができますか?以下はサンプルコードです。これを達成するにはこのコードが意味がありますか?JSchライブラリを使用してアップロードの再試行メカニズム

サンプルコード:

originalFile = 'abc.pdf'; 
tempFile = 'abc.pdf.temp'; 
fileInputStream = createobject("java", "java.io.FileInputStream").init('C:\abc.pdf'); 
SftpChannel.put(fileInputStream,tempFile); 

// Comparing remote file size with local file 
if(SftpChannel.lstat(tempFile).getSize() NEQ localFileSize){ 
    // Allow to Resume the file transfer since the file size is different 
    SftpChannel.put(fileInputStream,tempFile,SftpChannel.RESUME); 
    if(SftpChannel.lstat(tempFile).getSize() NEQ localFileSize){ 
     // Check again if the file is not fully transferred (During RESUME) then 
     // deleting the file since dont want to keep a corrupted file in the server. 
     SftpChannel.rm(tempFile); 
    } 
}else{//assuming file is fully transferred 
    SftpChannel.rename(tempFile ,originalFile); 
} 
+0

これはコード作成サービスではありません。これを実装する際に特に問題がありますか?何を試しましたか?あなたのコードを私たちに教えてください。 –

+0

この情報を得るためにsuperuser.comを使用できますか? – user3742125

+0

私は分かりません。あなたはプログラミングの質問があります。だからここで尋ねるべきです。しかし、あなたはこのサイトの範囲を質問する必要があります。それはあなたの現在のコードとあなたの特定の問題を含める必要があります。あなたは特定の問題を尋ねなかった。あなたは私たちにあなたの仕事をするように求めています。 –

答えて

0
  1. それは投げずにput終了した後に、ファイルサイズが一致しないことが非常に低いです。それはほとんど起こりません。たとえ起こったとしても、RESUMEに電話するのはほとんど意味がありません。 putで検出されない何らかの致命的な問題が発生した場合、RESUMEは役に立ちません。

    RESUMEで試してみても、一度試してみると意味がありません。再試行することが理にかなっていると思われる場合は、一度だけでなく、成功するまで再試行を続ける必要があります。

  2. 例外を捕捉して、再開/削除する必要があります。それが主要な回復メカニズムです。これは100倍以上に発生する可能性があります。

+0

catch例外でRESUMEを使用する場合は、ファイルが存在する必要があります。check..right ??どうすればこのリモートファイルが存在するのですか?または他の方法? – user3742125

+0

チェックする必要はありません。私がすでにあなたに言ったように、 'RESUME'はそれ自身をチェックします。しかし、必要に応じて、チェックのために 'lstat'や' stat'を使うことができます。 https://stackoverflow.com/q/11968878/850848 –

+0

lstatまたはstatがファイル存在チェックに使用されていないことを参照してください。それはちょうど "ls"です。または、lstatまたはstatを使用してファイルの存在を見つける方法がありません – user3742125

関連する問題