jcifs登录域账户 下载文件 等

登陆域账户
方法一
在web.xml中加入过滤器
<filter>
<filter-name>NtlmHttpFilter</filter-name>
<filter-class>jcifs.http.NtlmHttpFilter</filter-class>
<!--jcifs.http.domainController 这个参数指定了DNS服务器的地址-->
<init-param>
<param-name>jcifs.http.domainController</param-name>
<param-value>domainip</param-value>
</init-param>
<!--jcifs.smb.client.domain 这个参数指定了DNS服务器的域名-->
<init-param>
<param-name>jcifs.smb.client.domain</param-name>
<param-value>domain</param-value>
</init-param>
<init-param>
<param-name>jcifs.util.loglevel</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>jcifs.smb.lmCompatibility</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>jcifs.smb.client.useExtendedSecurity</param-name>
<param-value>false</param-value>
</init-param>
<!-- 连接超时时间 -->
<init-param>
<param-name>jcifs.smb.client.soTimeout</param-name>
<param-value>5000</param-value>
</init-param>
<!--域 的用户 和密码 (ad管理员的用户名密码,部署到正式环境需要修改)-->
<init-param>
<param-name>jcifs.smb.client.username</param-name>
<param-value>username</param-value>
</init-param>
<init-param>
<param-name>jcifs.smb.client.password</param-name>
<param-value>password</param-value>
</init-param>
</filter>
<!-- 拦截请求 -->
<filter-mapping>
<filter-name>NtlmHttpFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

启动项目容器,访问项目 会弹出登录框,可以直接回车登陆

方法二
private static NtlmPasswordAuthentication authentication = null;
/**
* 登录共享文件服务器
* @return
*/
static{
//参数 1:域名,2:用户名,3:密码
authentication = new NtlmPasswordAuthentication(SharePropertires.DoMain,
SharePropertires.UserName, SharePropertires.PassWord);
try {
UniAddress uniAddress = UniAddress.getByName(SharePropertires.ShareIP); //参数 为IP
SmbSession.logon(uniAddress, authentication); //登录
} catch (Exception e) {
authentication = null;
logger.error(“登录共享文件服务器”+SharePropertires.ShareIP+”失败”);
}
}
//authentication 为上面初始化的后的内容
//urlFilePath 为文件下载路径
SmbFile file = new SmbFile(urlFilePath, authentication);

获取文件并下载的方法如下,以上两种方法皆适用

/**
* 使用Jcifs SmbFile下载文件
* @param localFilePath 下载本地路径
* @param urlFilePath 文件Url地址 参数样例:smb://129.0.0.1/data/ 为文件夹 注意文件类型Url后面加入 **/**
* smb://129.0.0.1/data/data.text 为文件
* @return
*/
public static void downLoadShareFile(String localFilePath, String urlFilePath) throws Exception{
//这一行代码听说可以加快文件下载的速度,还未尝试。如果尝试后好用会回来补充
System.setProperty("jcifs.smb.client.dfs.disabled", "true");
SmbFile file;
SmbFile[] files = null;
if(authentication != null){
try {
file = new SmbFile(urlFilePath, authentication);
if(file.isDirectory()){ //若文件为文件夹
files = file.listFiles();
for (SmbFile smbFile : files) {
String fileName = smbFile.getName();
SmbFileInputStream inputStream = new SmbFileInputStream(file);
new DownLoadFile(localFilePath+fileName, inputStream, 4,
file.getContentLength()).downLoadFileByInputStream();
}
} else if(file.isFile()){ //若为文件
String fileName = file.getName();
SmbFileInputStream inputStream = new SmbFileInputStream(file);
new DownLoadFile(localFilePath+fileName, inputStream, 4,
file.getContentLength()).downLoadFileByInputStream();
}
} catch (Exception e) {
logger.error("共享文件服务器访问失败:"+e.getMessage());
throw new Exception("共享文件服务器访问失败:"+e.getMessage());
}
}
}

上面的文件下载 使用的是线程下载,百度可得

int filesize = smbFile.getContentLength() ;
long filesize = smbFile.getContentLengthLong();

关于使用SmbFile获取文件大小,参考了java.io类
使用 SmbFile.length(); 获取long类型的bytes数据
完美解决文件过大不能使用getContentLength()的问题!!!

办法总比困难多!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值