我有一个要上传的文件(例如abc.pdf
)。我第一次想要将此文件作为临时文件上传(例如abc.pdf.temp
)。然后,如果文件成功传输(完全传输),那么我需要将其重命名为其原始名称(abc.pdf
)。但是如果文件没有完全转移,那么我需要删除我最初上传的临时文件,因为我不想在服务器中保留损坏的文件。使用此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)
在put
完成而不投掷之后,文件大小不会匹配,这是不太可能的。它很难发生。即使它发生了,呼叫RESUME
也没有意义。如果put
未检测到某些灾难性问题,则RESUME
可能无法提供帮助。
即使您想尝试RESUME
,尝试一次也没有意义。如果你认为重试是有意义的,你必须继续重试,直到你成功,而不仅仅是一次。
您应该捕获异常并恢复/删除/无论如何。这是主要的恢复机制。这比1发生的可能性高100倍。