我正在尝试使用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)
没有人知道可能是什么问题,我该如何解决?
最佳答案
您似乎将本地文件“C:\Workspace\upload-file\test.xlsx” 上传到远程目录,在SFTP上为“/var/www/folder” 。
我想您对本地文件(“C:\Workspace\upload-file\test.xlsx” )上的 r eading, w riting, e xecuting等具有全部权限,但是您的远程文件夹是“/var/www/folder” ,可能不接受您应用程序的访问,包括“上载”操作。
解决方案:
解决此问题的最简单方法是为所有用户授予所有权限,使其可以在您的上传目标目录(“/var/www/folder” )中执行任何操作。请尝试使用此linux命令来检查对您的上载文件夹的权限。
ls -ld /var/www/folder
如果您看到普通用户不允许使用/var/www/folder/目录 w 拼版或 r eading(例如:drwxr-xr-x),请使用以下命令授予此文件夹权限。
chmod 777 /var/www/folder
//check permission again.
ls -ld /var/www/folder
如果您可以检查目标文件夹的权限是否足够( drwxrwxrwx ),请再次运行您的应用程序。
注意:
为其他用户授予所有权限不是一个好习惯。
请执行此解决方案进行测试,然后在以后更改适合您规范的权限设置。有关更多详细信息,Please check this link(Click).
关于spring - SFTP上传文件权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54637381/