增加公共方法

This commit is contained in:
2025-06-16 14:32:41 +08:00
parent 3d7f09982c
commit 1ff4977a3e
2 changed files with 171 additions and 0 deletions

View File

@@ -130,6 +130,13 @@
<version>3.5.2</version>
</dependency>
<!--传输文件工具包-->
<dependency>
<groupId>eu.agno3.jcifs</groupId>
<artifactId>jcifs-ng</artifactId>
<version>2.1.9</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,164 @@
package com.njcn.common.utils.file;
import jcifs.CIFSContext;
import jcifs.CIFSException;
import jcifs.context.SingletonContext;
import jcifs.smb.*;
import java.io.*;
import java.net.MalformedURLException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* @author hongawen
* @version 1.0
* @data 2025/6/16 14:28
* 用于向Windows服务器传输文件
*/
public class FileTransferUtil {
/**
* 向Windows服务器传输文件
* @param serverIP 服务器IP地址
* @param username 用户名
* @param password 密码
* @param localFilePath 本地文件路径
* @param remotePath 远程路径例如D:/folder/
* @return 是否传输成功
*/
public static boolean transferFile(String serverIP, String username, String password,
String localFilePath, String remotePath) {
try {
// 构建远程文件URL
String remoteUrl = String.format("smb://%s/%s", serverIP, remotePath);
// 创建认证上下文
CIFSContext context = SingletonContext.getInstance()
.withCredentials(new NtlmPasswordAuthenticator(username, password));
// 获取远程目录
SmbFile remoteDir = new SmbFile(remoteUrl, context);
if (!remoteDir.exists()) {
remoteDir.mkdirs();
}
// 获取本地文件
Path localPath = Paths.get(localFilePath);
if (!Files.exists(localPath)) {
throw new FileNotFoundException("Local file not found: " + localFilePath);
}
// 构建远程文件路径
String fileName = localPath.getFileName().toString();
String remoteFilePath = remoteUrl + fileName;
SmbFile remoteFile = new SmbFile(remoteFilePath, context);
// 传输文件
try (InputStream in = Files.newInputStream(localPath);
OutputStream out = remoteFile.getOutputStream()) {
byte[] buffer = new byte[8192];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
}
return true;
} catch (MalformedURLException e) {
System.err.println("Invalid URL: " + e.getMessage());
return false;
} catch (CIFSException e) {
System.err.println("CIFS error: " + e.getMessage());
return false;
} catch (IOException e) {
System.err.println("IO error: " + e.getMessage());
return false;
}
}
/**
* 向Windows服务器传输文件带进度回调
* @param serverIP 服务器IP地址
* @param username 用户名
* @param password 密码
* @param localFilePath 本地文件路径
* @param remotePath 远程路径
* @param progressCallback 进度回调接口
* @return 是否传输成功
*/
public static boolean transferFileWithProgress(String serverIP, String username, String password,
String localFilePath, String remotePath,
ProgressCallback progressCallback) {
try {
// 构建远程文件URL
String remoteUrl = String.format("smb://%s/%s", serverIP, remotePath);
// 创建认证上下文
CIFSContext context = SingletonContext.getInstance()
.withCredentials(new NtlmPasswordAuthenticator(username, password));
// 获取远程目录
SmbFile remoteDir = new SmbFile(remoteUrl, context);
if (!remoteDir.exists()) {
remoteDir.mkdirs();
}
// 获取本地文件
Path localPath = Paths.get(localFilePath);
if (!Files.exists(localPath)) {
throw new FileNotFoundException("Local file not found: " + localFilePath);
}
// 获取文件大小
long fileSize = Files.size(localPath);
// 构建远程文件路径
String fileName = localPath.getFileName().toString();
String remoteFilePath = remoteUrl + fileName;
SmbFile remoteFile = new SmbFile(remoteFilePath, context);
// 传输文件
try (InputStream in = Files.newInputStream(localPath);
OutputStream out = remoteFile.getOutputStream()) {
byte[] buffer = new byte[8192];
int len;
long transferred = 0;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
transferred += len;
// 计算并回调进度
if (progressCallback != null) {
int progress = (int) ((transferred * 100) / fileSize);
progressCallback.onProgress(progress);
}
}
}
return true;
} catch (MalformedURLException e) {
System.err.println("Invalid URL: " + e.getMessage());
return false;
} catch (CIFSException e) {
System.err.println("CIFS error: " + e.getMessage());
return false;
} catch (IOException e) {
System.err.println("IO error: " + e.getMessage());
return false;
}
}
/**
* 进度回调接口
*/
public interface ProgressCallback {
void onProgress(int progress);
}
}