`
huangyongxing310
  • 浏览: 494321 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

smb上传下载文件

 
阅读更多
/***
	 * 从局域网共享文件获取文件输入流
	 * @param remotePathAndFileName:共享的相对路径+文件名(含后缀),如:/qualityNotice/我们的祖国是花园.txt
	 * @return
	 */
	public static InputStream smbGetFile(String remotePathAndFileName){
		String fullPath = "";
		String lastChar = remotePathAndFileName.substring(0,1);
		SmbFileInputStream in = null;
		String ip = CommonManage.smbgetConnectIp();
		String user = CommonManage.smbgetConnectUser();
		String pass = CommonManage.smbgetConnectPass();
		String targetPath = "smb://" + user + ":" + pass + "@" + ip + "/htwyRes";
		if (lastChar.equals("/") || lastChar.equals("\\"))
			fullPath = targetPath + remotePathAndFileName.trim();
		else
			fullPath = targetPath + "/" + remotePathAndFileName.trim();
		SmbFile file = null;
		System.out.println("下载路径:"+fullPath);
		try {
			file = new SmbFile(fullPath);
			System.out.println("下载文件:"+file);
			in = new SmbFileInputStream(file);
			System.out.println("输出流:"+in);
		} catch (Exception e) {
			try {
				if (in==null){
					fullPath = targetPath + "/noPic.jpg";
					file = new SmbFile(fullPath);
					in = new SmbFileInputStream(file);
				}
			} catch (Exception e2) {
				
			}
		}
		return in;
	}








/***
	 * 从局域网共享文件下载文件到指定目录
	 * @param remotePathAndFileName		共享的相对路径+文件名(含后缀),如:/qualityNotice/我们的祖国是花园.txt
	 * @param localPath					要存放的本地目录
	 * @param realFileName				下载后的文件名(含后缀),如果为空则按共享文件夹上的文件名(uuid),如果指定了按指定的,例如:我们的祖国是花园.txt
	 * @return
	 */
	public static fileUploadReturn smbDownloadFile(String remotePathAndFileName,String localPath,String realFileName){
		InputStream in = null;
		OutputStream out = null;
		fileUploadReturn fur = new fileUploadReturn();
		String ip = CommonManage.smbgetConnectIp();
		String user = CommonManage.smbgetConnectUser();
		String pass = CommonManage.smbgetConnectPass();
		try{
			File localFile = null;
			String targetFullPath = "";
			String oneChar = remotePathAndFileName.substring(0,1);
			String targetPath = "smb://" + user + ":" + pass + "@" + ip + "/htwyRes";
			if (oneChar.equals("/") || oneChar.equals("\\"))
				targetFullPath = targetPath + remotePathAndFileName.trim();
			else
				targetFullPath = targetPath + "/" + remotePathAndFileName.trim();

			SmbFile smbFile = new SmbFile(targetFullPath);
			if (smbFile==null){
				targetFullPath = targetPath + "/noPic.jpg";
				smbFile = new SmbFile(targetFullPath);
			}
			oneChar = localPath.substring(localPath.length()-1);
			if (!oneChar.equals("/") && !oneChar.equals("\\"))
				localPath = localPath + File.separator;

			File existsTest = new File(localPath);
			if (!existsTest.exists())
				existsTest.mkdirs();
			
			String fileName = smbFile.getName();
			if (realFileName.equals("") || realFileName==null){
				localFile = new File(localPath + fileName);
				fur.setSysFileName(fileName);
			} else {
				localFile = new File(localPath + realFileName);
				fur.setSysFileName(realFileName);
			}

			in = new SmbFileInputStream(smbFile);
			out = new FileOutputStream(localFile);
			byte[] buffer = new byte[1024];
			int length = 0;
			while ((length = in.read(buffer)) > 0) {
				out.write(buffer, 0, length);
			}

			fur.setSucess(true);
			fur.setMsg("下载成功。");
		} catch (Exception e) {
			fur.setSucess(false);
			fur.setMsg("下载失败。");
			e.printStackTrace();
			return fur;
		} finally {
			try {
				if (out!=null)
					out.close();
				if (in!=null)
					in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return fur;
	}

	/***
	 * 判断局域网共享文件下的文件是否存在
	 * @param remotePathAndFile		共享电脑路径加文件 如/qualityNotice/a213dadfdc35z432d2yu9.txt
	 * @return
	 */
	public static boolean smbCheckFileExists(String remotePathAndFile){
		boolean isExists = true;
		String ip = CommonManage.smbgetConnectIp();
		String user = CommonManage.smbgetConnectUser();
		String pass = CommonManage.smbgetConnectPass();
		try {
			String targetFullPath = "";
			String oneChar = remotePathAndFile.substring(0,1);
			String targetPath = "smb://" + user + ":" + pass + "@" + ip + "/htwyRes";
			if (oneChar.equals("/") || oneChar.equals("\\"))
				targetFullPath = targetPath + remotePathAndFile.trim();
			else
				targetFullPath = targetPath + "/" + remotePathAndFile.trim();
			
			SmbFile checkFile = new SmbFile(targetFullPath);
			if (checkFile.exists() && checkFile.isFile()){
				
			} else
				isExists = false;
		} catch (Exception e) {
			isExists = false;
			e.printStackTrace();
		}
		return isExists;
	}







/***
	 * 把本地磁盘中的文件上传到局域网共享文件下
	 * @param remotePath			共享电脑路径 如:/qualityNotice
	 * @param localPathAndFileName	完整的本地的文件路径,如 C:/htwy/我们的祖国是花园.txt
	 */
	public static fileUploadReturn smbUploadFile(String remotePath, String localPathAndFileName){
		InputStream in = null;
		OutputStream out = null;
		fileUploadReturn fur = new fileUploadReturn();
		String ip = CommonManage.smbgetConnectIp();
		String user = CommonManage.smbgetConnectUser();
		String pass = CommonManage.smbgetConnectPass();
		try {
			File localFile = new File(localPathAndFileName);
			String targetFullPath = "";
			String oneChar = remotePath.substring(0,1);
			String targetPath = "smb://" + user + ":" + pass + "@" + ip + "/htwyRes";
			if (oneChar.equals("/") || oneChar.equals("\\"))
				targetFullPath = targetPath + remotePath.trim();
			else
				targetFullPath = targetPath + "/" + remotePath.trim();

			SmbFile existsTest = new SmbFile(targetFullPath);
			if (!existsTest.exists())
				existsTest.mkdirs();
			
			String fileExt = localPathAndFileName.substring(localPathAndFileName.lastIndexOf('.') + 1);
			if (fileExt.equals("") || fileExt==null){
				fur.setSucess(false);
				fur.setMsg("文件名应包含后缀名。");
			} else {
				String sysFileName = CommonManage.getUuid() + "." + fileExt;
				SmbFile remoteFile = null;
				oneChar = targetFullPath.substring(targetFullPath.length()-1);
				if (oneChar.equals("/") || oneChar.equals("\\"))
					remoteFile = new SmbFile(targetFullPath + sysFileName);
				else
					remoteFile = new SmbFile(targetFullPath + "/" + sysFileName);

				in = new FileInputStream(localFile);
				out = new SmbFileOutputStream(remoteFile);
				byte[] buffer = new byte[1024];
				int length = 0;
				while ((length = in.read(buffer)) > 0) {
					out.write(buffer, 0, length);
				}

				fur.setSucess(true);
				fur.setSysFileName(sysFileName);
				fur.setMsg("上传成功。");
			}
		} catch (Exception e) {
			fur.setSucess(false);
			fur.setMsg("上传失败。");
			e.printStackTrace();
		} finally {
			try {
				out.close();
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return fur;
	}

	/***
	 * 把本地磁盘中的文件上传到局域网共享文件下
	 * @param remotePath	共享电脑路径 如:/qualityNotice
	 * @param inputStream	文件的InputStream形式
	 * @param fileName		本地的文件名(含后缀名),如:我们的祖国是花园.txt
	 * @return
	 */
	public static fileUploadReturn smbUploadFile(String remotePath, InputStream inputStream, String fileName){
		InputStream in = null;
		OutputStream out = null;
		fileUploadReturn fur = new fileUploadReturn();
		String ip = CommonManage.smbgetConnectIp();
		String user = CommonManage.smbgetConnectUser();
		String pass = CommonManage.smbgetConnectPass();
		try {
			String targetFullPath = "";
			String oneChar = remotePath.substring(0,1);
			String targetPath = "smb://" + user + ":" + pass + "@" + ip + "/htwyRes";
			if (oneChar.equals("/") || oneChar.equals("\\"))
				targetFullPath = targetPath + remotePath.trim();
			else
				targetFullPath = targetPath + "/" + remotePath.trim();

			SmbFile existsTest = new SmbFile(targetFullPath);
			if (!existsTest.exists())
				existsTest.mkdirs();
			
			String fileExt = fileName.substring(fileName.lastIndexOf('.') + 1);
			if (fileExt.equals("") || fileExt==null){
				fur.setSucess(false);
				fur.setMsg("文件名应包含后缀名。");
			} else {
				String sysFileName = CommonManage.getUuid() + "." + fileExt;
				SmbFile remoteFile = null;
				oneChar = targetFullPath.substring(targetFullPath.length()-1);
				if (oneChar.equals("/") || oneChar.equals("\\"))
					remoteFile = new SmbFile(targetFullPath + sysFileName);
				else
					remoteFile = new SmbFile(targetFullPath + "/" + sysFileName);

				in = inputStream;
				out = new SmbFileOutputStream(remoteFile);
				byte[] buffer = new byte[1024];
				int length = 0;
				while ((length = in.read(buffer)) > 0) {
					out.write(buffer, 0, length);
				}

				fur.setSucess(true);
				fur.setSysFileName(sysFileName);
				fur.setMsg("上传成功。");
			}
		} catch (Exception e) {
			fur.setSucess(false);
			fur.setMsg("上传失败。");
			e.printStackTrace();
		} finally {
			try {
				out.close();
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return fur;
	}

	/***
	 * 把本地磁盘中的文件上传到局域网共享文件下并覆盖文件
	 * @param remotePath	共享电脑路径 如:/qualityNotice
	 * @param inputStream	文件的InputStream形式
	 * @param fileName		覆盖的文件名(含后缀名),如:我们的祖国是花园.txt
	 * @return
	 */
	public static fileUploadReturn smbUploadFileEdit(String remotePath, InputStream inputStream, String fileName){
		InputStream in = null;
		OutputStream out = null;
		fileUploadReturn fur = new fileUploadReturn();
		String ip = CommonManage.smbgetConnectIp();
		String user = CommonManage.smbgetConnectUser();
		String pass = CommonManage.smbgetConnectPass();
		try {
			String targetFullPath = "";
			String oneChar = remotePath.substring(0,1);
			String targetPath = "smb://" + user + ":" + pass + "@" + ip + "/htwyRes";
			if (oneChar.equals("/") || oneChar.equals("\\"))
				targetFullPath = targetPath + remotePath.trim();
			else
				targetFullPath = targetPath + "/" + remotePath.trim();

			SmbFile existsTest = new SmbFile(targetFullPath);
			if (!existsTest.exists())
				existsTest.mkdirs();
			
			String fileExt = fileName.substring(fileName.lastIndexOf('.') + 1);
			if (fileExt.equals("") || fileExt==null){
				fur.setSucess(false);
				fur.setMsg("文件名应包含后缀名。");
			} else {
				String sysFileName = fileName;
				SmbFile remoteFile = null;
				oneChar = targetFullPath.substring(targetFullPath.length()-1);
				if (oneChar.equals("/") || oneChar.equals("\\"))
					remoteFile = new SmbFile(targetFullPath + sysFileName);
				else
					remoteFile = new SmbFile(targetFullPath + "/" + sysFileName);

				in = inputStream;
				out = new SmbFileOutputStream(remoteFile);
				byte[] buffer = new byte[1024];
				int length = 0;
				while ((length = in.read(buffer)) > 0) {
					out.write(buffer, 0, length);
				}

				fur.setSucess(true);
				fur.setSysFileName(sysFileName);
				fur.setMsg("上传成功。");
			}
		} catch (Exception e) {
			fur.setSucess(false);
			fur.setMsg("上传失败。");
			e.printStackTrace();
		} finally {
			try {
				out.close();
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return fur;
	}





分享到:
评论

相关推荐

    Android读取SMB服务器资源或者下载资源文件

    在Android平台上,访问和下载SMB(Server Message Block)服务器上的资源是一项常见任务,尤其是在企业环境中,SMB常用于共享文件和数据。SMB是一种网络文件系统协议,它允许网络上的计算机共享文件、打印机和其他...

    Java对Samba进行上传与下载文件-jcifs

    例如,下载文件可以使用`SmbFileInputStream`,上传文件则使用`SmbFileOutputStream`。 ```java // 下载文件 SmbFile remoteFile = new SmbFile("smb://server/share/filename", auth); InputStream in = new ...

    JAVA SMB共享文件夹操作文件jar支持smb2、smb3.rar

    - 实现文件的断点续传和并发上传下载。 - 监听SMB共享上的文件系统事件,实现自动化处理。 - 处理SMB2和SMB3的安全特性,如加密和签名。 在Java程序中引入这些库后,通过适当的API调用,可以轻松实现与SMB共享文件...

    SMB协议 文件管理器APP

    1. 应用功能:此类应用通常具备浏览、搜索、上传、下载、复制、剪切、粘贴、重命名、删除等基本文件操作。用户可以通过输入服务器地址、用户名和密码来连接到内网中的共享资源,实现移动设备与电脑之间的无缝文件...

    java使用smb访问网络共享文件

    最近tomcat做了负载均衡,碰到一个难题,就是上传文件的共享问题。 最后使用的解决方案是使用一个共享地址,该地址可以被多个服务器共同访问。...实现上传文件到网络共享文件夹和从网络共享文件夹下载文件

    使用smbj.jar访问共享文件夹,解决SMB2/SMB3共享文件夹访问的问题

    SMB是一种网络通信协议,主要用于在局域网内共享文件、打印机、串行端口和互联网连接。早期版本的SMB(如SMB1)存在一些安全漏洞和性能问题。随着技术的发展,SMB2和SMB3相继推出,带来了更高的性能、更强的安全性和...

    Jsp+Servelt使用 smb访问网络共享文件

    最近tomcat做了负载均衡,碰到一个难题,就是上传文件的共享问题。 最后使用的解决方案是使用一个共享地址,该地址可以被多个服务器共同访问。...实现上传文件到网络共享文件夹和从网络共享文件夹下载文件

    利用jcifs-1.3.15.jar实现共享文件上传下载

    这个库允许Java程序访问局域网内的共享文件,无论是进行上传还是下载。下面将详细介绍如何利用jcifs-1.3.15.jar实现共享文件的上传和下载功能。 首先,我们需要了解jcifs的基本用法。jcifs库提供了SmbFile类,该类...

    java操作网络共java-smb2

    java操作网络共享 smb2协议 使用smbj.jar访问共享文件夹,解决SMB2/SMB3共享文件夹访问 使用smbj.jar访问共享文件夹,支持SMB2/SMB3,用于解决使用jcifs.jar不支持SMB2/SMB3的问题

    SMB文件共享需要的Jar包001

    SMB文件共享需要的Jar包,实现文件上传、下载。

    JAVA下载远程Linux服务器的文件

    在Java编程中,有时我们需要与远程Linux服务器进行交互,例如下载或上传文件。在这个场景下,我们可以使用SMB(Server Message Block)协议,这是一种网络文件共享协议,常见于Windows系统,但同样可以应用于Linux...

    使用Linux系统搭建FTP与SMB服务器.pdf

    FTP 服务器是一种文件传输协议服务器,允许用户通过网络上传和下载文件。使用 Linux 系统搭建 FTP 服务器可以提高文件传输的效率和安全性。 四、搭建 SMB 服务器 SMB 服务器是一种服务器消息块服务器,允许用户...

    SMB 详尽解析

    详尽介绍SMB协议,协议的实现,文件设备的操作,设备通信,上传,下载,删除,更名等。

    samba 如何上传文件

    ### Samba 如何上传文件 #### 一、Samba 是什么? Samba 是一个用于实现 Linux 或 Unix 系统与 Windows 系统间文件共享的软件包。它提供了 SMB(Server Message Block)协议的支持,使得不同操作系统之间的用户...

    上传文件到samba服务器

    Samba使得Android设备能以类似于Windows的方式与Samba服务器进行通信,从而实现文件的上传和下载。 在Android端实现文件上传到Samba服务器,主要涉及以下几个关键技术点: 1. ** SMB 库**:由于Android原生并不...

    跨服务器上传【网络文件系统smaba】

    例如,创建一个名为"uploads"的共享目录,允许特定用户上传文件。 ```ini [uploads] path = /var/uploads writeable = yes create mask = 0775 directory mask = 0775 public = no valid users = user1, user2 ``` ...

    androidsmb

    5. **文件流操作**:读写SMB服务器上的文件需要理解文件流的概念,开发者可能使用了`java.io`或`java.nio`包来处理输入/输出流,进行文件上传和下载。 6. **网络连接和断开**:项目可能包含了建立和断开SMB连接的...

    pysmb:pysmb是一个用Python编写的实验性SMBCIFS库。 它实现了客户端SMBCIFS协议(SMB1和SMB2),该协议允许您的Python应用程序访问文件以及从SMBCIFS共享文件夹(例如Windows文件共享和Samba文件夹)中传输文件。

    它实现了客户端SMB / CIFS协议(SMB1和SMB2),该协议允许您的Python应用程序访问文件和从SMB / CIFS共享文件夹(例如Windows文件共享和Samba文件夹)中传输文件。 主要项目网站: : 文档: : 问题追踪器:请...

    Linux操作系统下的SMB、DHCP、DNS、FTP、MAIL、WEB六个服务总结[参考].pdf

    FTP用于上传和下载文件。在Linux中,常用的FTP服务器软件有vsftpd: 1. 安装vsftpd:`sudo apt-get install vsftpd` 2. 配置文件:`/etc/vsftpd.conf`,设置用户权限、匿名访问等。 3. 启动服务:`sudo service ...

Global site tag (gtag.js) - Google Analytics