我有一个文件要上传(比如说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);
}
在put
没有抛出的情况下完成后,文件大小不匹配的可能性很小。它几乎不可能发生。即使发生了,调用 也没有多大意义RESUME
。如果发生了 未检测到的灾难性错误put
,RESUME
则不太可能有帮助。
即使您想尝试使用RESUME
,尝试一次也是没有意义的。如果您认为重试是有意义的,那么您必须不断重试直到成功,而不仅仅是一次。
您应该捕获异常并恢复/删除/无论如何。这是主要的恢复机制。这比 1 发生的可能性高 100 倍。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句