java实现通过共享文件夹实现文件上传下载(附源码工具类)

2023-10-27

1.简介 

      要实现文件上传下载基于smb协议。

       SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。

       SMB使用了NetBIOS的应用程序接口 (Application Program Interface,简称API)。另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超过120个函数,甚至Windows NT也没有全部支持到,最近微软又把 SMB 改名为 CIFS(Common Internet File System)。

2.java实现方式共享文件夹操作

1.首先确保已设置好共享文件夹,局域网测试共享文件夹是否测试成功。网上有很多教程,这里不再叙述。

举例:现有A机(192.168.0.133)和B机(192.168.0.134),在同一局域网下,B机已设置共享文件夹。在A机首先windows+R键,调用命令窗口,输入\\192.168.0.134确保能访问到共享文件夹说明已设置成功,如不成功,请先设置共享文件夹。

2.需要用到jcifs-1.3.18.jar这个jar包。maven引用如下:

		<dependency>
		    <groupId>jcifs</groupId>
		    <artifactId>jcifs</artifactId>
		    <version>1.3.18</version>
		</dependency>

3.SubUtil实现类:

public class SmbUtil {
	/* 文件上传 
	 * String localFilePath:要上传的本地文件路径
	 * String path:远程服务器共享文件夹名称
	 * String username:远程服务器用户名
	 * String password:远程服务器密码
	 * */
	
    public static void upload(String localFilePath,String path,String username,String password) {
        InputStream in = null;
	    OutputStream out = null;
       try {
	    File localFile = new File(localFilePath);
	    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, username, password);
//	    jcifs.Config.setProperty("jcifs.smb.lmCompatibility","2");
	    String remoteUrl = "smb://192.168.0.134" + path + (path.endsWith("/") ? "" : "/");
	    SmbFile remoteFile = new SmbFile(remoteUrl + "/" + localFile.getName(),auth);
	    remoteFile.connect(); 
	    in = new BufferedInputStream(new FileInputStream(localFile));
	    out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
	    byte[] buffer = new byte[4096];
	    int len = 0;
	            while ((len = in.read(buffer, 0, buffer.length)) != -1) {
	                out.write(buffer, 0, len);
	            }
	            out.flush();
	        }
	        catch (Exception e) {
	        	e.printStackTrace();
	        }
	        finally {
	            try {
	                if(out != null) {
	                    out.close();
	                }
	                if(in != null) {
	                    in.close();
	                }
	            }
	            catch (Exception e) {}
	        }
    }
	/* 文件下载 
	 * String localFilePath:本地文件夹
	 * String path:远程服务器共享文件名
	 * String username:远程服务器用户名
	 * String password:远程服务器密码
	 * */
    public static void download(String localFilePath,String path, String username,String password){
    	InputStream in = null;
 	    OutputStream out = null;
      try {
 	    File localFile = new File(localFilePath);
 	    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, username, password);
// 	    jcifs.Config.setProperty("jcifs.smb.lmCompatibility","2");
 	    String remoteUrl = "smb://192.168.0.134" + path + (path.endsWith("/") ? "" : "/");
 	    SmbFile remoteFile = new SmbFile(remoteUrl + "/" + localFile.getName(),auth);
 	    remoteFile.connect(); 
 	    in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
 	    out = new BufferedOutputStream(new FileOutputStream(localFile));
 	    byte[] buffer = new byte[4096];
 	    int len = 0;
 	            while ((len = in.read(buffer, 0, buffer.length)) != -1) {
 	                out.write(buffer, 0, len);
 	            }
 	            out.flush();
 	        }
 	        catch (Exception e) {
 	        	e.printStackTrace();
 	        }
 	        finally {
 	            try {
 	                if(out != null) {
 	                    out.close();
 	                }
 	                if(in != null) {
 	                    in.close();
 	                }
 	            }
 	            catch (Exception e) {}
 	        }
    }

}

3.出现的异常

java.net.UnKnownHostException:..__MSBROWSE__..:

首先确保户号和密码完全正确。

错误写法:(用户名和密码不要拼接在remoteUrl里面。)

String remoteUrl = "smb://admin:admin@192.168.0.134" + path + "a.txt";

SmbFile remoteFile = new SmbFile(remoteUrl);

正确写法:

String username="admin";

String password="admin";

String remoteUrl = "smb:/192.168.0.134" + path + "a.txt";

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

SmbFile remoteFile = new SmbFile(remoteUrl);

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java实现通过共享文件夹实现文件上传下载(附源码工具类) 的相关文章

  • Jackson JSON + Java 泛型

    我正在尝试将以下 JSON 反序列化 映射到List
  • “源兼容性”和“目标兼容性”有什么区别?

    之间有什么关系 区别sourceCompatibility and targetCompatibility 当它们设置为不同的值时会发生什么 根据工具链和兼容性 https docs gradle org current userguide
  • 在Windows Server 2003下如何在本地系统帐户下运行jvisualvm.exe?

    我在带有 Java 1 6 u 20 的 Windows Server 2003 下将 GlassFish 3 0 1 作为 Windows 服务运行 总体上我很满意 我希望能够在这个 JVM 上使用 VisualVM 并使用无法在 Tom
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • Java 中的 <-- 是什么? [复制]

    这个问题在这里已经有答案了 我遇到了下面的片段 它输出到4 3 2 1 我从来没有遇到过 lt 在爪哇 Is lt 使 var1 的值变为 var2 的运算符 public class Test public static void mai
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • 我们可以有条件地声明 spring bean 吗?

    有没有一种方法可以有条件地声明 Spring bean 例如
  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • 未装饰窗户的 Windows Snap 功能?

    有谁知道如何允许未装饰的窗户使用此功能 唯一的选择就是重新实施它 有任何想法吗 谢谢 可停靠可能是唯一的JToolBar http docs oracle com javase tutorial uiswing components too
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • 类更改(例如字段添加或删除)是否保持 Serialized 的向后兼容性?

    我有一个关于 Java 序列化的问题 在这种情况下 您可能需要修改可序列化类并保持向后兼容性 我有丰富的 C 经验 所以请允许我将 Java 与 NET 进行比较 在我的Java场景中 我需要使用Java的运行时序列化机制序列化一个对象 并
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • Selenium 单击在 Internet Explorer 11 上不起作用

    我尝试在 Internet Explorer 上单击 selenium 但它不起作用 我努力了element click moveToElement element click build perform javascript没事了 事实上
  • 使用 DBCP 配置 Tomcat

    在闲置一段时间 几个小时 后 我们收到了 CommunicationsException 来自 DBCP 错误消息 在异常中 位于这个问题的末尾 但我没有看到任何配置文件中定义的 wait timeout 我们应该看哪里 在 tomcat
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve

随机推荐

  • 七大常见排序,你究竟懂几个?(上)

    幼儿园的小朋友会排队做操 小学生们会排队打饭 大妈购物也会抢着 排队 付账 作为程序猿的你 会以下的排序算法吗 本节目标 1 排序的概念及意义 2 直接插入和希尔排序的实现及分析 3 直接选择和堆排序的实现及分析 首先我们先来看一下基本的七
  • 【UE4_笔记】————人物的基本移动

    人物的基本移动 1 键盘控制移动 2 鼠标控制视角 3 人物的转向 4 跳 说明 完成了人物的创建之后 接下来就是要完成人物的移动了 下面是我的丑丑的主角 1 键盘控制移动 1 编辑 项目设置 点击引擎列表中的输入 2 在轴映射中添加如下属
  • TensorFlow的静态图机制和Tensorboard中手动添加监控数据(scalar/simple_value...)的方法

    说明 本文将介绍如何向tensorboard中添加sclar的方法 但会先尽量简要介绍一下tensorflow的静态图机制 查看添加方法可以直接去这一部分 TensorFlow的静态计算图机制 关于并非众所周知的静态计算图 唯一能说的是 这
  • linux系统如何安装编译器,如何安装gfortran编译器

    如何安装gfortran编译器 发布时间 2010 05 29 22 32 04来源 红联作者 kiger 大家好 我是linux的新手 因论文需要编译一些 f90的源代码 这两天刚把debian linux装好 网上说要装gfortran
  • FreeMarker在js中使用

    var checkedArray 初始化将测试集包含的用例存在数组里面 lt if beneficiaryVOs gt lt list beneficiaryVOs as item gt checkedArray push id item
  • 联想计算机BIOS开启Intel-vx,各品牌电脑BIOS开启Intel VT-X虚拟化技术方法(华硕,联想,HP,技嘉等)...

    我们在电脑上运行虚拟机 模拟器是需要CPU虚拟化技术支持的 如果你的电脑没有开启 那么将无法运行虚拟机或模拟器 那么下面小编整理了华硕 联想 HP 技嘉等品牌电脑BIOS下开启Intel VT X虚拟化技术方法 有需要的朋友可以学习一下哦
  • spring配置websocket并实现群发/单独发送消息

    spring框架中自带了websocket的jar包 利用它可以实现与H5中WebSocket的对接 甚至websocket还可以通过依赖注入与http请求一同工作 详细配置实现过程如下 文件目录结构如下 主要是controller和web
  • 卡诺图化简法详细介绍

    没想到最后保存成了图片格式 给大家带来不方便 抱歉抱歉 http pan baidu com s 1bOIj5k 这里是WORD版本 支持更改
  • Node.js处理URL模块详解

    处理URL 在hello koa工程中 我们处理http请求一律返回相同的HTML 这样虽然非常简单 但是用浏览器一测 随便输入任何URL都会返回相同的网页 正常情况下 我们应该对不同的URL调用不同的处理函数 这样才能返回不同的结果 例如
  • 微信小程序date转毫秒数遇到的坑

    业务需求要对new Date 进行计算 要计算就要先转成毫秒数 但我发现直接 是不行的会出现NaN 不过倒是可以 于是想到了gettime方法 测试一波 依旧是NaN 明明代码补全会自己跳出这个方法 居然不能用 最后总算发现用 Data p
  • mybatis多数据源配置

    MapperScannerConfigurer以下是正常只有一个数据源 只有一个sqlSessionFactory 这样写没问题 但是有多个数据源 有2个sqlSessionFactory 的时候这样写就不可以了 需要你使用 sqlSess
  • Vagrant

    什么是Vagrant Vagrant 是用于管理虚拟机生命周期的命令行实用程序 在一个一次性和一致的环境中隔离依赖项及其配置 为什么要使用Vagrant 通过定义我们知道Vagrant主要是用于管理虚拟机的 当我们需要创建很多虚拟机的时候
  • Win2012 AD中将域用户加入到所有客户端本地管理员组中

    为了让域中的某个用户具有所有客户端的管理员权限 方法如下 在AD服务器中打开 组策略管理器 点击 开始 管理工具 组策略管理 右击 Default Domain Policy 选择 编辑 定位到 本地用户和组 右键 新建 本地组 将分配的客
  • <%@ include file=""%> 我们都知道在jsp中include有两种形式 分别是

  • JQuery突出显示效果

    示例 突出显示效果
  • 最新Python爬虫有道翻译JS逆向解析详细介绍版,附源码

    我的第一篇文章 写的很详细 这里方便刚接触爬虫帅哥们理解 大家一起加油 前两步为js的逆向分析过程 了解过程的请跳到第三步 源码 最后打包成exe文件 有道翻译网址 在线翻译 有道 第一步 找到有道翻译发送请求的Url地址 老规矩进去界面F
  • 从方法到目标了解什么是机器学习?

    一 什么是机器学习 1 简述 机器学习是 人工智能 AI 和计算机科学的一个分支 专注于利用数据和算法来模仿人类的学习方式 逐步提高其准确性 过去几十年来 存储和处理能力方面的技术进步催生了一些基于机器学习的创新产品 例如 Netflix
  • NodeJs快速入门

    NodeJs入门介绍 Node js是一个Javascript运行环境 runtime 实际上它是对Google V8引擎进行了封装 所以 语法还是JavaScript的语法 只不过它封装了一些类库 可以更多的事 nodejs官网 在命令行
  • Python接口基础: WSDL 文件(soap )照样可以用requests进行post

    昨天 遇到一个难题 我接到一个webservice API 接口进行批量出单任务 造数据 方便测试report XML 内容如下
  • java实现通过共享文件夹实现文件上传下载(附源码工具类)

    1 简介 要实现文件上传下载基于smb协议 SMB Server Message Block 通信协议是微软 Microsoft 和英特尔 Intel 在1987年制定的协议 主要是作为Microsoft网络的通讯协议 SMB 是在会话层