您的位置:首页 > 其它

jcifs登录域账户 下载文件 等

2015-11-25 14:19 211 查看
登陆域账户

方法一

在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()的问题!!!

办法总比困难多!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: