我试图上传使用SFTP到Linux机器从我的本地Windows PC Excel文件。
这里是我的代码:
private void uploadToSftp() {
try
{
ChannelSftp sftpClient = null;
Channel channel = null;
JSch jsch = new JSch();
Session session = jsch.getSession("username", "host", 22);
session.setPassword("password");
Properties config = new Properties();
config.put("StrictHostKeyChecking","no");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
sftpClient = (ChannelSftp) channel;
sftpClient.cd("/var/www/folder");
File localFile = new File("C:\\Workspace\\upload-file\\test.xlsx");
sftpClient.put(localFile.getAbsolutePath(),localFile.getName());
sftpClient.disconnect();
channel.disconnect();
session.disconnect();
} catch (JSchException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
}
}
但每次我运行该应用程序时,我得到错误:
3: Permission denied
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2873)
at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:594)
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:475)
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:365)
有谁知道什么可能是问题,我怎样才能解决这个问题?
你似乎到本地文件“C:\工作区\上传文件\ test.xlsx”上传到远程目录“的/ var / WWW /文件夹”在SFTP。
我猜你有读,写的所有权限,在您的本地文件执行等(“C:\工作区\上传文件\ test.xlsx”),但你的远程文件夹“在/ var / WWW /文件夹”,可能不接受包括“上传”行动你的应用程序的访问。
解:
解决这个问题的最简单的方法是给予所有用户做任何事情在你的上传目标目录(“/无功/网络/文件夹”)中的所有权限。请尝试在你的文件夹上传检查权限这个Linux命令。
ls -ld /var/www/folder
如果你看到你的/ var / WWW /文件夹/目录不允许写入或读出(前的。drwxr-XR-X),对于普通用户,请授予该文件夹与follwing命令的权限。
chmod 777 /var/www/folder
//check permission again.
ls -ld /var/www/folder
如果你可以检查目标文件夹的权限不够(drwxrwxrwx),请再次运行应用程序。
注意:对所有的权限为其他用户不被认为是一个很好的做法。请只是这样做的解决方案用于测试,并更改许可后设置适合您的具体要求。欲了解更多详情,Please check this link(Click).