gpt4 book ai didi

smb - 如何使用 JCIFS 将文件从 SMB 共享复制到不在域中的本地驱动器

转载 作者:行者123 更新时间:2023-12-04 22:14:05 24 4
gpt4 key购买 nike

我正在尝试使用 JCIFS 将一些远程文件复制到本地驱动器,在 Java 中。
远程机器在域内。本地机器不在域中。

下面的代码有效,但它真的很慢(700Kb 需要 2 分钟......而且我有很多 Mb......):

SmbFile remoteFile = new SmbFile("smb://...")
OutputStream os = new FileOutputStream("/path/to/local/file");
InputStream is = remoteFile.getInputStream();
int ch;
while ((ch = is.read()) != -1) {
os.write(ch);
}
os.close();
is.close();

我想我可以使用 SmbFile.copyTo(),但我不知道如何访问本地文件。如果我编写以下内容,则会出现连接错误:
localfile = new SmbFile("file:///path/to/localfile")

这个问题与 How to copy file from smb share to local drive using jcifs in Java?有关

最佳答案

除非使用有效的 smb URL,否则无法构造 SmbFile 对象。请参阅 http://jcifs.samba.org/src/docs/api/ 上的构造函数摘要,以及顶部关于 SmbFile URL 的讨论。

SmbFile URLs have the following syntax: smb://[[[domain;]username[:password]@]server[:port]/[[share/[dir/]file]]][?[param=value[param2=value2[...]]]



因此,如果您真的想避免使用输入流并使用 copyTo(),则您必须在本地计算机上拥有一个可以将 jCIFS 指向的 SMB 共享。

如果您的本地计算机是 Windows 计算机,则您可以访问一些默认共享,例如 C$。

因此,您可以执行以下操作:
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("domain", "username", "password") //or whatever authentication works on your local machine.
SmbFile myFile = new SmbFile("smb://localhost/C\$/path/to/localfile", auth)

然后你可以使用 remoteFile.copyTo(myFile)

如果您不在 Windows 主机上,则必须安装 Samba 并设置 Samba 共享以连接到您的本地计算机...同样,如果您绝对不打算使用 inputStreams。

关于smb - 如何使用 JCIFS 将文件从 SMB 共享复制到不在域中的本地驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14749434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com