jcifs.smb.SmbAuthException: Access is denied.

jcifs.smb.SmbAuthException: Access is denied  

2013-07-11 08:55:02|  分类: 程序|字号 订阅

一、出错环境:

利用JAVA 通过 smb 向远程服务器(WINDOWS 2008)上传文件时报错


jcifs.smb.SmbAuthException: Access is denied.
 at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:571)

二、原因:

我使用的远程服务器用户的权限不足。

三、处理方法:

1、调整用户权限为管理员,我报错的原因,主要就是当前用户“隶属于”之前有三个“Administrators”\"ora_dba"\"users",其实只保留Administrator 即可。如下图:

jcifs.smb.SmbAuthException: Access is denied - 比目鱼 - 比目鱼的博客

 2、设置远程访问的文件夹为共享、完全控制,操作如下图。

jcifs.smb.SmbAuthException: Access is denied - 比目鱼 - 比目鱼的博客
四、java smb 集群上传示例
package common;
import java.io.BufferedInputStream;   
import java.io.BufferedOutputStream;   
import java.io.File;   
import java.io.FileInputStream;   
import java.io.FileOutputStream;   
import java.io.IOException;   
import java.io.InputStream;   
import java.io.OutputStream;   
  
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;   
import jcifs.smb.SmbFileInputStream;   
import jcifs.smb.SmbFileOutputStream;   
  /**
   * 
   * @author zby at 20130710
   *
   */
public class Smbtest {   
    /**  
     * 从局域网中共享文件中得到文件并保存在本地磁盘上  
     * @param remoteUrl 共享电脑路径 如:smb://admin:sx8165@192.168.0.6/D$/DMSFILE/SPECIALPRODUCTDEMAND/18.jpg  , smb为共享文件  
     * 注:如果一直出现连接不上,有提示报错,并且错误信息是 用户名活密码错误 则修改共享机器的文件夹选项 查看 去掉共享简单文件夹的对勾即可。  
     * @param localDir 本地路径 如:D:/  
     */  
    public static void smbGet(String remoteUrl,String localDir){   
        InputStream in = null;   
        OutputStream out = null;   
        try {   
            SmbFile smbFile = new SmbFile(remoteUrl);   
            String fileName = smbFile.getName();   
            File localFile = new File(localDir+File.separator+fileName);   
            in = new BufferedInputStream(new SmbFileInputStream(smbFile));   
            out = new BufferedOutputStream(new FileOutputStream(localFile));   
            byte []buffer = new byte[1024];   
            while((in.read(buffer)) != -1){   
                out.write(buffer);   
                buffer = new byte[1024];   
            }   
        } catch (Exception e) {   
            e.printStackTrace();   
        }finally{   
            try {   
                out.close();   
                in.close();   
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
        }   
    }   
    /**  
     * 把本地磁盘中的文件上传到局域网共享文件下  
     * @param remoteUrl 共享电脑路径 如:smb://admin:sx8165@192.168.0.6/D$/DMSFILE/SPECIALPRODUCTDEMAND/  
     * @param localFilePath 本地路径 如:D:/  
     */  
    public static void smbPut(String remoteUrl,String localFilePath){   
        InputStream in = null;   
        OutputStream out = null;   
        try {   
            File localFile = new File(localFilePath);   
            String fileName = localFile.getName();   
            NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("192.168.0.6","admin","sx8165");
            SmbFile remoteFile = new SmbFile(remoteUrl + "/" + fileName,auth);//方法一
            //SmbFile remoteFile = new SmbFile(remoteUrl+"/"+fileName);   //方法二
            in = new BufferedInputStream(new FileInputStream(localFile));   
            out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));   
            byte []buffer = new byte[1024];   
            while((in.read(buffer)) != -1){   
                out.write(buffer);   
                buffer = new byte[1024];   
            }   
        } catch (Exception e) {   
            e.printStackTrace();   
        }finally{   
            try {   
                out.close();   
                in.close();   
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
        }   
    }   
       
    public static void main(String[] args) {   
      
          smbPut("smb://admin:sx8165@192.168.0.6/D$/DMSFILE/SPECIALPRODUCTDEMAND/", "D:/18.jpg");  
          smbGet("smb://admin:sx8165@192.168.0.6/D$/DMSFILE/SPECIALPRODUCTDEMAND/18.jpg", "D:/load");   
  
    }   
  
CIFS(Common Internet File System) 协议 CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机的服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议现在是局域网上用于服务器文件访问和打印的协议。象SMB协议一样,CIFS在高层运行,而不象TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。 SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445。 服务器信息块(SMB)协议是一种IBM协议,用于在计算机间共享文件、打印机、串口等。SMB 协议可以用在因特网的TCP/IP协议之上,也可以用在其它网络协议如IPX和NetBEUI 之上。   SMB 一种客户机/服务器、请求/响应协议。通过 SMB 协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序可以访问远程服务器端的文件、以及打印机、邮件槽(mailslot)、命名管道(named pipe)等资源。   在 TCP/IP 环境下,客户机通过 NetBIOS over TCP/IP(或 NetBEUI/TCP 或 SPX/IPX)连接服务器。一旦连接成功,客户机可发送 SMB 命令到服务器上,从而客户机能够访问共享目录、打开文件、读写文件,以及一切在文件系统上能做的所有事情。   从 Windows 95 开始,Microsoft Windows 操作系统(operating system)都包括了客户机和服务器 SMB 协议支持。Microsoft 为 Internet 提供了 SMB 的开源版本,即通用 Internet 文件系统 (CIFS)。与现有 Internet 应用程序如文件传输协议(FTP)相比, CIFS 灵活性更大。对于 UNIX 系统,可使用一种称为 Samba 的共享软件。
评论 3 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

shine1200

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值