写/使用Samba / JCIFS问题上传文件(SmbAuthException:访问被拒绝)(Wr

2019-08-08 13:01发布

所以我想从Android设备的文件写入共享文件夹窗口。 我使用JCIFS的最新版本, 代码显示可用的网络共享工作正常。 所以,我认为一切都确定了JCIFS和我的LAN,无线网络等。这里是文件上传的代码(其实我只想写一个文字字串到文件):

    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,"","");

所以我在做什么错误,以及如何才达到我的目标时,有没有权威性是需要可以访问共享文件夹?
顺便说一句我的三星电视是基于Linux,并使用Samba客户是没有问题访问相同的共享文件夹,并从那里播放MP3(嗯,是的,它只能读取)。 由于我的AOS装置通过WiFi访问我的LAN(而不是经由以太网连接的TV)我还检查使用笔记本+的WiFi到共享文件夹的访问,没有发现问题。
添加:
现在我试图执行以下行:

file = new SmbFile(url, auth);
android.util.Log.i("save2Samba", "file.exists(): " + file.exists());

并得到同样的访问被拒绝。 我甚至试着写文件...

Answer 1:

我的天啊!!! 解决方案是如此简单! 要访问网络,这是无法登录/密码保护,因此不需要任何授权不NtlmPasswordAuthentication.ANONYMOUS但它是:

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, null, null);

该死的不是那么明显!



Answer 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());

另外,请检查您共享您正在访问的文件夹路径。 还要检查它给写权限的文件夹



文章来源: Write/upload a file using Samba/JCIFS issue (SmbAuthException: Access is denied)