【发布时间】:2019-10-09 09:41:59
【问题描述】:
我想使用 com.jcraft.JSch 0.1.55 读取文件扩展属性(文件在 SFTP 服务器上)。我知道SftpATTR这个类实际上确实有一个方法
public String[] getExtended()
但在我的情况下它返回 null。
我在这段代码中看到了
static SftpATTRS getATTR(Buffer buf){
SftpATTRS attr=new SftpATTRS();
attr.flags=buf.getInt();
if((attr.flags&SSH_FILEXFER_ATTR_SIZE)!=0){ attr.size=buf.getLong(); }
if((attr.flags&SSH_FILEXFER_ATTR_UIDGID)!=0){
attr.uid=buf.getInt(); attr.gid=buf.getInt();
}
if((attr.flags&SSH_FILEXFER_ATTR_PERMISSIONS)!=0){
attr.permissions=buf.getInt();
}
if((attr.flags&SSH_FILEXFER_ATTR_ACMODTIME)!=0){
attr.atime=buf.getInt();
}
if((attr.flags&SSH_FILEXFER_ATTR_ACMODTIME)!=0){
attr.mtime=buf.getInt();
}
if((attr.flags&SSH_FILEXFER_ATTR_EXTENDED)!=0){
int count=buf.getInt();
if(count>0){
attr.extended=new String[count*2];
for(int i=0; i<count; i++){
attr.extended[i*2]=Util.byte2str(buf.getString());
attr.extended[i*2+1]=Util.byte2str(buf.getString());
}
}
}
return attr;
}
最后一个 if 语句负责读取扩展属性,但在我看来它总是评估为 false,因为
int flags=0;
和
public static final int SSH_FILEXFER_ATTR_EXTENDED= 0x80000000;
我无法直接更改标志,因为它的设置器没有公共修饰符。
还有其他方法可以更改标志或以某种方式读取扩展属性吗?
【问题讨论】:
-
您的 SFTP 服务器是否提供任何扩展属性?那是什么服务器?
-
@MartinPrikryl 如果我没记错的话,sftp 服务器是 SSH 包的一部分,它是我的 Centos 7 上的 OpenSSH_7.4p1。我可以看到你已经在 stackoverflow.com/questions/48687079/… 中回答了类似的问题.不幸的是,sftp 服务器似乎不支持文件扩展属性。
-
这看起来像XY problem。你想实现什么?
-
@MartinPrikryl 好的,我会将 .tar.gz 包发送到 sftp 服务器。我想定期使用 bash 脚本将它们解压到同一个文件夹中。然后我将获得带有 wso2 入站端点的结果文件(这就是要求)。额外的要求是知道它们来自什么 .tar.gz 包。这就是我想存储在扩展属性中的内容。
标签: java sftp jsch file-attributes