我正在尝试使用jcifs SMB将一些文件从存储目录移动到远程服务器“BOB”。我需要使用jcifs,因为移动来自Android应用程序,I.E。我正在将照片从应用程序移动到远程服务器。为了以用户身份进行身份验证,我的公司使用Active Directory。有一段时间,Active Directory与照片所在的服务器是同一台服务器,一切都很好。不幸的是,他们不得不将存储Active Directory的服务器更改为“RAINY”,而不是将照片存储在何处。因此,我需要将这些照片发送到“BOB”,但使用“RAINY”作为域控制器进行登录。尽管我做了最好的尝试,但我收到一条错误“没有登录服务器可用于服务登录请求”它在遇到“SMBFileOutputStream”代码行时返回此错误。
// Logon first.
UniAddress domainController = UniAddress.getByName("10.1.0.7");
SmbSession.logon(domainController, auth);
File moveMe = pics[k];
String cakeFolder = cupCakes[i].getName();
String transFolder = transfers[j].getName();
String destination = "smb://10.1.0.54/shared/Photos/Cupcakes/" + cakeFolder + "/" + transFolder + "/" + moveMe.getName();
smbDest = new SmbFile(destination, auth);
SmbFileOutputStream out = new SmbFileOutputStream(smbDest);
FileInputStream fis = new FileInputStream(moveMe);
out.write(IOUtils.toByteArray(fis));
out.close();
答案 0 :(得分:0)
也许如果您可以发布一些有关网络捕获的详细信息,我可以帮助您。 有一些新的SMB java项目支持SMB2及以上,我想你可以尝试一下。
答案 1 :(得分:0)
你在哪里" SmbSession.logon()"从?
如果您正在谈论进行krb5样式登录,JCIFS不支持Kerberos。你无论如何都无法做到这一点,因为Android没有加入域名(或者Android可以,我不知道)。
无论如何,您必须简单地使用明文凭证。更具体地说,使用您的域/用户名/密码创建一个NtlmPasswordAuthentication对象并将其传递给SmbFile(或者假设SmbFileOutputStream会更好 - 请参阅examples / Put.java)。