所以我正在尝试将一个文件从android设备写入windows共享文件夹。我正在使用最新版本的JCIFS,code which displays available network shares工作正常。所以我假设JCIFS和我的局域网,WiFi等一切正常。这是文件上传的代码(实际上我只是想写一个文件Sring to a File):
public boolean save2Samba(String text, String fileName) {
try {
// My Windows shares doesn't require any login/password
// String name="login";//my windows username
// String password="password1";//my windows password
// sSambaFolder contains a path like MYPC/E/SharedFolderName/
String url = "smb://" + sSambaFolder.toLowerCase()+fileName;
SmbFile file = null;
try {
// assume ANONYMOUS is my case but there is no description of this in JCIFS API
NtlmPasswordAuthentication auth = NtlmPasswordAuthentication.ANONYMOUS;
file = new SmbFile(url, auth);
android.util.Log.i("TestApp",url);
// output is like smb://mypc/e/sharedfoldername/file.txt;
SmbFileOutputStream out = new SmbFileOutputStream(file);
out.write(text.getBytes());
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
由于记录了网址,我确定它是正确的(我也使用上面提到的代码检查了网址,并浏览了文件夹的内容)。
但问题是我总是这样:
W/System.err(3214): jcifs.smb.SmbAuthException: Access is denied.
共享不受密码保护,因此我无需任何用户名/密码即可访问。我可以从另一个WinPC读取/写入/删除文件,不需要授权。此外,我尝试使用共享为WinPC上的用户创建密码,但结果是相同的。所以我尝试了几个版本的NtlmPasswordAuthentication而没有运气:
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(":");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("Administrator:"); //actual username on WinPC with shares
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("Administrator");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null,"Administrator","");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null,"","");
那么我做错了什么以及在没有auth时如何实现我的目标需要访问共享文件夹?
BTW我的三星电视是基于Linux并使用samba客户端访问相同的共享文件夹没有问题,并从那里播放MP3(嗯,是的,它只读)。由于我的AOS设备通过WiFi(而不是通过以太网连接的电视)访问我的LAN,我还检查了使用笔记本电脑+ WiFi访问共享文件夹,发现没有问题。
的加了:
我现在正在尝试执行以下行:
file = new SmbFile(url, auth);
android.util.Log.i("save2Samba", "file.exists(): " + file.exists());
并获得相同的访问被拒绝。我甚至都没有尝试写文件......
答案 0 :(得分:12)
OMG !!!解决方案很简单!访问非登录/密码保护的网络,因此不需要任何授权不是NtlmPasswordAuthentication.ANONYMOUS但它是:
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, null, null);
该死的不是那么明显!
答案 1 :(得分:2)
尝试使用此代码
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",
username, password);
sharepath = "smb://" + pathtosharefolder + test.txt;
sFile = new SmbFile(sharepath, auth);
SmbFileOutputStream out = new SmbFileOutputStream(file, true);
out.write(text.getBytes());
同时检查您是否共享了要访问的文件夹路径。还要检查它是否已授予文件夹
的写入权限