我正在尝试使用SFTP将excel文件从本地Windows PC上传到linux计算机。
这是我的代码:
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)
有人知道什么可能是问题吗,我该如何解决呢?
答案 0 :(得分:0)
您似乎将本地文件“ C:\ Workspace \ upload-file \ test.xlsx” 上传到远程目录“ / var / www / folder” 在SFTP上。
我猜您对本地文件具有 r eading, w 写入, e 执行等所有权限( :\ Workspace \ upload-file \ test.xlsx“ ),但是您的远程文件夹” / var / www / folder“ 可能不接受您的应用程序访问权限,包括“上传”操作
解决方案:
解决此问题的最简单方法是为所有用户授予所有权限,使其可以在您的上传目标目录(“ / var / www / folder” )中执行任何操作。请尝试使用此linux命令检查对您的上传文件夹的权限。
ls -ld /var/www/folder
如果看到您的 / var / www / folder / 目录不允许 w 写入或 r 消极(例如:drwxr-xr -x)(对于普通用户),请使用follwing命令授予该文件夹的权限。
chmod 777 /var/www/folder
//check permission again.
ls -ld /var/www/folder
如果您可以检查目标文件夹的权限是否足够( drwxrwxrwx ),请再次运行您的应用程序。
注意: 为其他用户授予所有权限不是一个好习惯。 请执行此解决方案进行测试,然后在以后更改适合您规范的权限设置。有关更多详细信息,请Please check this link(Click).