|
@@ -0,0 +1,73 @@
|
|
|
+package cn.iocoder.yudao.framework.file.core.client.impl.ftp;
|
|
|
+
|
|
|
+import cn.hutool.core.io.FileUtil;
|
|
|
+import cn.hutool.core.util.CharsetUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.hutool.extra.ftp.Ftp;
|
|
|
+import cn.hutool.extra.ftp.FtpException;
|
|
|
+import cn.hutool.extra.ftp.FtpMode;
|
|
|
+import cn.iocoder.yudao.framework.file.core.client.impl.AbstractFileClient;
|
|
|
+
|
|
|
+import java.io.ByteArrayInputStream;
|
|
|
+import java.io.ByteArrayOutputStream;
|
|
|
+import java.io.File;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Ftp 文件客户端
|
|
|
+ *
|
|
|
+ * @author 芋道源码
|
|
|
+ */
|
|
|
+public class FtpFileClient extends AbstractFileClient<FtpFileClientConfig> {
|
|
|
+
|
|
|
+ private Ftp ftp;
|
|
|
+
|
|
|
+ public FtpFileClient(Long id, FtpFileClientConfig config) {
|
|
|
+ super(id, config);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void doInit() {
|
|
|
+ // 补全风格。例如说 Linux 是 /,Windows 是 \
|
|
|
+ if (!config.getBasePath().endsWith(File.separator)) {
|
|
|
+ config.setBasePath(config.getBasePath() + File.separator);
|
|
|
+ }
|
|
|
+ // 初始化 Ftp 对象
|
|
|
+ this.ftp = new Ftp(config.getHost(), config.getPort(), config.getUsername(), config.getPassword(),
|
|
|
+ CharsetUtil.CHARSET_UTF_8, null, null, FtpMode.valueOf(config.getMode()));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String upload(byte[] content, String path) {
|
|
|
+ // 执行写入
|
|
|
+ String filePath = getFilePath(path);
|
|
|
+ String fileName = FileUtil.getName(filePath);
|
|
|
+ String dir = StrUtil.removeSuffix(filePath, fileName);
|
|
|
+ boolean success = ftp.upload(dir, fileName, new ByteArrayInputStream(content));
|
|
|
+ if (!success) {
|
|
|
+ throw new FtpException(StrUtil.format("上海文件到目标目录 ({}) 失败", filePath));
|
|
|
+ }
|
|
|
+ // 拼接返回路径
|
|
|
+ return super.formatFileUrl(config.getDomain(), path);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void delete(String path) {
|
|
|
+ String filePath = getFilePath(path);
|
|
|
+ ftp.delFile(filePath);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public byte[] getContent(String path) {
|
|
|
+ String filePath = getFilePath(path);
|
|
|
+ String fileName = FileUtil.getName(filePath);
|
|
|
+ String dir = StrUtil.removeSuffix(path, fileName);
|
|
|
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
+ ftp.download(dir, fileName, out);
|
|
|
+ return out.toByteArray();
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getFilePath(String path) {
|
|
|
+ return config.getBasePath() + path;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|