2017-11-20 2 views
0

Ich habe eine Datei zum Hochladen (sagen abc.pdf). Ich möchte diese Datei zum ersten Mal als temporäre Datei hochladen (zB abc.pdf.temp). Wenn die Datei dann erfolgreich übertragen (vollständig übertragen) wurde, muss ich sie in ihren ursprünglichen Namen umbenennen (abc.pdf). Aber wenn die Datei nicht vollständig übertragen wird, muss ich die temporäre Datei löschen, die ich ursprünglich hochgeladen habe, da ich keine beschädigte Datei auf dem Server behalten möchte. Ist das mit dieser JSch-Bibliothek möglich? Unten ist der Beispielcode. Macht dieser Code Sinn, dies zu erreichen?Upload Wiederholungsmechanismus mit JSch Bibliothek

Beispielcode:

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

Dies ist kein Code-Schreibdienst. Welches spezielle Problem haben Sie bei der Implementierung? Was hast du schon probiert? Zeig uns deinen Code. –

+0

Kann ich superuser.com verwenden, um diese Informationen zu erhalten? – user3742125

+0

Ich verstehe nicht. Sie haben eine Programmierfrage. Also solltest du hier fragen. Aber Sie müssen eine Frage mit einem Umfang dieser Website stellen. Das sollte Ihren aktuellen Code und Ihr spezifisches Problem beinhalten. Sie haben kein spezifisches Problem gestellt. Sie bitten uns, Ihre Arbeit für Sie zu erledigen. –

Antwort

0
  1. Es ist sehr unwahrscheinlich, dass nach den put Oberflächen ohne werfen, wird die Dateigröße nicht überein. Es kann kaum passieren. Selbst wenn es passiert, ist es wenig sinnvoll, RESUME anzurufen. Wenn etwas katastrophales schief geht, das von put nicht erkannt wird, wird RESUME wahrscheinlich nicht helfen.

    Und selbst wenn Sie mit RESUME versuchen möchten, ist es nicht sinnvoll, einmal zu versuchen. Wenn Sie glauben, dass es sinnvoll ist, es erneut zu versuchen, müssen Sie es erneut versuchen, bis Sie erfolgreich sind, nicht nur einmal.

  2. Sie sollten Ausnahme fangen und fortsetzen/löschen/was auch immer. Das ist der primäre Wiederherstellungsmechanismus. Dies ist 100 Mal wahrscheinlicher als 1.

+0

Wenn wir RESUME in der Catch-Ausnahme verwenden wollen, dann sollten wir eine Datei vorhanden haben, check..right ??. Wie kann ich diese Remote-Datei existieren Check .. using "ls" -Methode? oder anders? – user3742125

+0

Keine Überprüfung erforderlich. Wie ich bereits gesagt habe, überprüft sich der 'RESUME' selbst. Aber wenn Sie möchten, können Sie den "lstat" oder "stat" für die Überprüfung verwenden. Siehe https://stackoverflow.com/q/11968878/850848 –

+0

lstat oder stat ist nicht für eine Datei vorhanden überprüfen .. Es ist nur "ls" .. richtig ?? Oder gibt es eine Möglichkeit, Datei Existenz mit lstat oder stat finden – user3742125

Verwandte Themen