jcifs登录域账户 下载文件 等
2015-11-25 14:19
211 查看
登陆域账户
方法一
在web.xml中加入过滤器
启动项目容器,访问项目 会弹出登录框,可以直接回车登陆
方法二
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);
获取文件并下载的方法如下,以上两种方法皆适用
上面的文件下载 使用的是线程下载,百度可得
int filesize = smbFile.getContentLength() ;
long filesize = smbFile.getContentLengthLong();
关于使用SmbFile获取文件大小,参考了java.io类
使用 SmbFile.length(); 获取long类型的bytes数据
完美解决文件过大不能使用getContentLength()的问题!!!
办法总比困难多!!!
方法一
在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()的问题!!!
办法总比困难多!!!
相关文章推荐
- c++ ftream
- (原)Understand中查看函数调用关系
- apache开启虚拟主机功能与httpd-vhosts.conf 配置
- JavaScript编写简单的计算器
- Git配置及GitHub的基础使用(Win及Ubuntu)
- 中国货币政策“新常态”
- Android之手机出现"已安装了存在签名冲突的同名数据包"的原因及解决办法
- FileInputStream 读取txt文件内容
- ecshop 权限系统设计原理分析。
- Javascript 实现复制(Copy)动作方法大全
- 宽字符转 Byte WideCharToMultiByte
- 用 WEKA 进行数据挖掘,第 3 部分: 最近邻和服务器端库
- Shark Machine Learning Library 安装配置运行
- Android监听键盘显示和隐藏
- dhcp+nfs+pxe方式安装系统
- [基础] - Python中 raw_input 和 input 的区别
- CGRectInset、CGRectOffset、等对比整理
- iOS boundingRectWithSize使用
- android linux mirror website
- ListView 在getView()中设置一个item中的TextView的动态显示出现其它的也显示的bug解决方法