当前位置: 首页 > 知识库问答 >
问题:

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

叶展
2023-03-14

所以我试着从android设备写一个文件到windows共享文件夹。我使用的是最新版本的JCIFS和代码,显示可用的网络共享工作良好。所以我假设JCIFS和我的LAN、WiFi等都没问题。这里是文件上传的代码(实际上我只想写一个文本到文件中):

    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;
        }
    }

因为url是记录的,所以我确信它是正确的(我也使用上面提到的代码检查了url,它会浏览文件夹的包含)。
但问题是Im总是得到相同的:

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被要求访问共享文件夹时,如何实现我的目标?
顺便说一句,我的三星电视是基于linux的,使用samba客户机,它可以毫无问题地访问同一个共享文件夹,并从那里播放MP3(嗯,是的,它只读)。由于我的AOS设备是通过WiFi(而不是通过以太网连接的电视)访问我的LAN的,我还使用笔记本+WiFi检查了对共享文件夹的访问,但没有发现任何问题。
添加:
我现在尝试执行以下行:

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

并拒绝相同的访问。我根本没想写文件...

共有1个答案

路裕
2023-03-14

天啊!!!解决办法太简单了!!!访问不受登录/密码保护因而不需要任何授权的网络不是NTLMPasswordAuthentication.Anonymous,但它是:

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

该死的没那么明显!

 类似资料:
  • 问题内容: 我有一个关于使用Samba JCIFS访问文件的问题。因此,有一个我要访问的服务器,我们将其称为server.unv.edu,工作组为WKGRP。此服务器中有一个共享:\\ server.unv.edu \ pcb $ 我尝试访问服务器的方式是: 和 但这不起作用。我得到了一个错误 任何人都可以给我建议或代码的正确性,以帮助我访问文件吗? 非常感谢。 问题答案: 您正在使它比应有的难度

  • 我正在编写一个android应用程序来使用JCIFS samba库访问windows共享,但是我收到新SmbFile(path,auth)上的

  • 我正在使用JCIFS写入windows共享。这一直很有效。它突然停止工作,现在得到一个jcifs.smb.smbauthException:访问被拒绝。例外。我知道我的凭据很好,因为我可以使用smb手动连接并写入文件夹,所以这不是问题。我使用的代码是: 它在“SmbFileOutputStream outputStream=new SmbFileOutputStream(file)”行上爆炸。几个

  • 问题内容: 我在FoxPro 6.0命令窗口中使用SQL命令,并遇到“文件访问被拒绝”。 我的SQL命令是: 情况: Windows 7专业版 FoxPro 6.0 main.dbf被共享给许多用户。 main.dbf不是 隐藏的 ,也不是 只写 任何意见将不胜感激! 问题答案: 此DBF文件位于共享驱动器上吗?如果是这样,则另一个用户可能使文件打开了“排他”,或者您正试图打开文件“排他”。默认状

  • 我已经使用这个库angular2文件上传https://github.com/valor-software/ng2-file-upload 现在我上传文件时收到此错误 无法加载XMLHttpRequesthttp://localhost:8080/files.对飞行前请求的响应未通过访问控制检查:当请求的凭据模式为“include”时,响应中“access control Allow Origin

  • 问题内容: 我在使它工作时遇到问题。它接收一个字符串,其中包含几条信息。但是,当我尝试将String写入文件以跟踪程序随时间的变化时,我收到拒绝访问错误: 叠层纱 完整的堆栈跟踪: 58行: 问题答案: 您必须先创建文件夹。但是您不能调用file.mkdirs()-您需要调用file.getParentFile()。mkdirs()-否则,您将使用文件名创建一个文件夹(这将阻止您使用以下命令创建文