
tech.mhuang.pacebox.oss.ftp.FtpLocalHandler Maven / Gradle / Ivy
package tech.mhuang.pacebox.oss.ftp;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import tech.mhuang.pacebox.core.exception.BusinessException;
import tech.mhuang.pacebox.core.exception.ExceptionUtil;
import tech.mhuang.pacebox.core.file.FileUtil;
import tech.mhuang.pacebox.core.io.IOUtil;
import tech.mhuang.pacebox.oss.BaseOssHandler;
import tech.mhuang.pacebox.oss.OssFieldProperties;
import tech.mhuang.pacebox.oss.domain.OssDeleteRequest;
import tech.mhuang.pacebox.oss.domain.OssDeleteResult;
import tech.mhuang.pacebox.oss.domain.OssDownloadRequest;
import tech.mhuang.pacebox.oss.domain.OssDownloadResult;
import tech.mhuang.pacebox.oss.domain.OssStorageType;
import tech.mhuang.pacebox.oss.domain.OssUploadRequest;
import tech.mhuang.pacebox.oss.domain.OssUploadResult;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
/**
* ftp上传文件
*
* @author mhuang
* @since 1.0.0
*/
public class FtpLocalHandler implements BaseOssHandler {
private OssFieldProperties properties;
@Override
public void setProperties(OssFieldProperties properties) {
this.properties = properties;
}
private FTPClient getClient() {
FTPClient ftpClient = new FTPClient();
try {
ftpClient.setControlEncoding(Charset.defaultCharset().name());
ftpClient.connect(properties.getProxyHost(), properties.getProxyPort());
ftpClient.login(properties.getProxyUsername(), properties.getProxyPwd());
int replyCode = ftpClient.getReplyCode(); //是否成功登录服务器
if (!FTPReply.isPositiveCompletion(replyCode)) {
throw new BusinessException(500, "无法链接到FTP服务");
}
} catch (IOException e) {
throw new BusinessException(500, "FTP链接异常", e);
}
return ftpClient;
}
private void resume(FTPClient client) {
if (client != null && client.isConnected()) {
try {
client.logout();
client.disconnect();
} catch (IOException ignored) {
}
}
}
@Override
public OssUploadResult upload(OssUploadRequest request) {
OssUploadResult.OssUploadResultBuilder result = OssUploadResult.builder().extendParam(request.getExtendParam());
FTPClient client = null;
try {
client = getClient();
client.setFileType(FTPClient.BINARY_FILE_TYPE);
client.makeDirectory(request.getBucketName());
client.changeWorkingDirectory(request.getBucketName());
if (request.getStorageType() == OssStorageType.LOCAL) {
File sourceFile = new File(request.getLocalUrl());
try (InputStream in = FileUtil.openInputStream(sourceFile)) {
client.storeFile(request.getKey(), in);
}
if (request.isDelFile()) {
sourceFile.delete();
}
} else if (request.getStorageType() == OssStorageType.BYTE) {
try (InputStream in = new ByteArrayInputStream(request.getByteArray())) {
client.storeFile(request.getKey(), in);
}
} else if (request.getStorageType() == OssStorageType.STREAM) {
try (InputStream in = request.getInStream()) {
client.storeFile(request.getKey(), in);
}
} else if (request.getStorageType() == OssStorageType.FILE) {
try (InputStream in = FileUtil.openInputStream(request.getFile())) {
client.storeFile(request.getKey(), in);
}
if (request.isDelFile()) {
request.getFile().delete();
}
}
result.success(true);
} catch (Exception e) {
result.throwable(e).message(ExceptionUtil.getMessage(e));
} finally {
resume(client);
}
return result.build();
}
@Override
public OssDownloadResult download(OssDownloadRequest request) {
OssDownloadResult.OssDownloadResultBuilder result = OssDownloadResult.builder().extendParam(request.getExtendParam());
FTPClient client = null;
ByteArrayOutputStream out = null;
try {
out = new ByteArrayOutputStream();
client = getClient();
client.changeWorkingDirectory(request.getBucketName());
client.setFileType(FTPClient.BINARY_FILE_TYPE);
client.retrieveFile(request.getKey(), out);
result.byteArray(out.toByteArray()).success(true);
} catch (Exception e) {
result.throwable(e).message(ExceptionUtil.getMessage(e));
} finally {
IOUtil.close(out);
resume(client);
}
return result.build();
}
@Override
public OssDeleteResult delete(OssDeleteRequest request) {
OssDeleteResult.OssDeleteResultBuilder result = OssDeleteResult.builder().extendParam(request.getExtendParam());
FTPClient client = null;
try {
client = getClient();
client.changeWorkingDirectory(request.getBucketName());
client.dele(request.getKey());
result.success(true);
} catch (Exception e) {
result.throwable(e).message(ExceptionUtil.getMessage(e));
} finally {
resume(client);
}
return result.build();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy