![](/img/trans.png)
[英]bluemix object storage file uploading successfully, but 0kb file is uploading on object storage using java
[英]file uploading successfully, but 0kb file is uploading on remote server using jsch sftp java
我正在使用Jsch和Sftp協議在一個簡單的Java應用程序中將文件從本地計算機上傳到遠程服務器。
我的代碼沒有錯誤也沒有異常,並且可以成功運行,但是當我查看遠程位置時,文件以0kb的格式上傳,沒有擴展名,並且名為“ D”。
我已經嘗試了很多方法,但是我無法弄清錯誤。
這是我的代碼。
String remoteDirectory = "D:\\Datastores\\RootStore\\Test\\";
String localDirectory = "C:\\pdffiles\\";
String fileToFTP = "demo.pdf";
String SFTPHOST = "hostIPaddress";
int SFTPPORT = 22;
String SFTPUSER = "username";
String SFTPPASS = "password";
String local_filename = fileToFTP;
String local_pathname = localDirectory;
String remote_filename = fileToFTP;
JSch jsch = null;
Session session = null;
ChannelSftp sftpChannel = null;
try
{
jsch = new JSch();
session = jsch.getSession(SFTPUSER, SFTPHOST);
session.setPassword(SFTPPASS);
session.setPort(SFTPPORT);
session.setConfig("StrictHostKeyChecking", "no");
session.setConfig("cipher.s2c", "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,aes256-ctr");
session.setConfig("cipher.c2s", "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,aes256-ctr");
session.connect();
sftpChannel = (ChannelSftp)session.openChannel("sftp");
sftpChannel.connect();
System.out.println(sftpChannel);
System.out.println(sftpChannel.getSession().isConnected());
FileInputStream fileBodyIns = new FileInputStream(local_pathname + local_filename);
System.out.println(local_pathname + local_filename);
System.out.println(remoteDirectory + remote_filename);
sftpChannel.put(fileBodyIns, remoteDirectory + remote_filename);
fileBodyIns.close();
sftpChannel.exit();
session.disconnect();
System.out.println("File uploaded successfully");
return "File uploaded successfully";
}
catch (Exception e)
{
e.printStackTrace();
return e.getMessage();
}
我的連接成功,線路
System.out.println(sftpChannel.getSession().isConnected());
給真
並且以下行成功打印
System.out.println("File uploaded successfully");
String remoteDirectory = "D:\\Datastores\\RootStore\\Test\\";
SFTP協議對遠程服務器上的文件路徑名使用類unix的命名方案。 文件分隔符為“ /”,並且不帶前導“ /”的路徑名被認為是相對於當前目錄的。 冒號和反斜杠沒有特殊含義。
根據這些規則,您要求遠程服務器在主目錄中創建一個名為“ D:\\ DataStores ...”的文件,並使用文字冒號和反斜杠。 如果您的遠程服務器是Cygwin OpenSSH服務器或基於Unix的服務器的某些其他端口,則SFTP服務器解釋文件名的方式與Windows操作系統解釋文件名的方式可能不匹配。
您需要找出正確的語法來引用通過此SFTP服務器的D:驅動器上的路徑。 如果是Cygwin SFTP服務器,我認為正確的語法應該是“ / cygdrive / d / Datastores / RootStore / Test / ...”。 如果SFTP服務器是其他供應商提供的,則可能需要查閱服務器文檔。 或者,您可以嘗試以交互方式登錄SFTP服務器,cd進入“ /”目錄,然后從那里進行探索。 如何引用D驅動器上的文件夾應該變得顯而易見。
我同意肯斯特的回答。 我在遠程Windows機器上有類似的問題,Linux風格的路徑解決了我的問題。 只是想添加,ChannelSftp的根目錄是遠程Windows機器上的C:\\磁盤,我不確定是否有辦法將文件放在D:\\磁盤上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.