From 9d302e22e703f33773507925a8038ac6b2ad3e20 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=B8=B8=E8=83=9C=E6=8C=AF?= <449117895@qq.com>
Date: Sat, 13 Jul 2024 12:06:17 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ftp=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
hiatmp-hidden-danger-server/pom.xml | 4 +-
.../server_api/controller/FtpController.java | 126 ++++++++
.../hiatmp/server_api/utils/CommonUtils.java | 20 ++
.../hiatmp/server_api/utils/FTPUtils.java | 287 ++++++++++++++++++
.../src/main/resources/application.yml | 16 +-
5 files changed, 448 insertions(+), 5 deletions(-)
create mode 100644 hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/FtpController.java
create mode 100644 hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/CommonUtils.java
create mode 100644 hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/FTPUtils.java
diff --git a/hiatmp-hidden-danger-server/pom.xml b/hiatmp-hidden-danger-server/pom.xml
index 32d066b..3a5ac8c 100644
--- a/hiatmp-hidden-danger-server/pom.xml
+++ b/hiatmp-hidden-danger-server/pom.xml
@@ -37,10 +37,10 @@
org.springframework.boot
spring-boot-starter-log4j2
-
+
com.alibaba
druid
diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/FtpController.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/FtpController.java
new file mode 100644
index 0000000..aef35dd
--- /dev/null
+++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/FtpController.java
@@ -0,0 +1,126 @@
+package com.hisense.hiatmp.server_api.controller;
+
+import cn.hutool.core.io.FileUtil;
+import com.hisense.hiatmp.model.common.ServerResponse;
+import com.hisense.hiatmp.server_api.utils.FTPUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
+
+@Api(tags="FTP操作")
+@RequestMapping(value = "/ftp")
+@RestController
+public class FtpController {
+ private static final Logger log = LoggerFactory.getLogger(FtpController.class);
+
+ /*@Autowired
+ private RedisUtil redisUtil;*/
+
+ @Autowired
+ private FTPUtils ftpUtils;
+
+ /**
+ * 上传文件-通过本地路径上传文件到ftp
+ * */
+ @ApiOperation(value="上传文件-通过本地路径上传文件到ftp")
+ @RequestMapping(value = "/uploadToFtp",method = RequestMethod.POST)
+ public ServerResponse uploadToFtp(@RequestBody String path) {
+ File file = new File(path);
+ //File file = new File("D:\\upload\\1.txt");
+ String url = "";
+ System.out.println(path+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
+ InputStream inputStream = FileUtil.getInputStream(file);
+ try {
+ String fileName = path.substring(path.lastIndexOf("/")+1);
+ url = ftpUtils.uploadToFtp(inputStream, fileName, false);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return ServerResponse.ok(url);
+ }
+
+
+ /**
+ * 上传文件-通过file上传到ftp
+ * */
+ @ApiOperation(value="上传文件-通过file上传到ftp")
+ @RequestMapping(value = "/uploadFileToFtp",method = RequestMethod.POST)
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType="form", name="file", dataType="MultipartFile", required=true, value="文件")
+ })
+ public ServerResponse uploadFileToFtp(@RequestParam("file") MultipartFile mfile) {
+ List list = Arrays.asList(".jpg",".jpeg",".png",".bmp",".avi"
+ ,".mov",".rmvb",".rm",".mp4");
+ //获取上传文件名,包含后缀
+ String originalFilename = mfile.getOriginalFilename();
+ //获取后缀
+ String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
+ if(!list.contains(substring.toLowerCase())){
+ return ServerResponse.error("请上传图片、视频文件");
+ }
+ //保存的文件名
+ String dFileName = UUID.randomUUID()+substring;
+ String url = "";
+ System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
+ try {
+ File file = multipartFileToFile(mfile);
+ InputStream inputStream = FileUtil.getInputStream(file);
+ url = ftpUtils.uploadToFtp(inputStream, dFileName, false);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return ServerResponse.ok(url);
+ }
+
+ public static File multipartFileToFile(MultipartFile file) throws Exception {
+ File toFile = null;
+ if (file.equals("") || file.getSize() <= 0) {
+ file = null;
+ } else {
+ InputStream ins = null;
+ ins = file.getInputStream();
+ toFile = new File(file.getOriginalFilename());
+ inputStreamToFile(ins, toFile);
+ ins.close();
+ }
+ return toFile;
+ }
+ public static void inputStreamToFile(InputStream ins,File file) {
+ try {
+ OutputStream os = new FileOutputStream(file);
+ int bytesRead = 0;
+ byte[] buffer = new byte[8192];
+ while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
+ os.write(buffer, 0, bytesRead);
+ }
+ os.close();
+ ins.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ /*@RequestMapping("/downloadFile")
+ public String downloadFile() {
+ try {
+ InputStream inputStream = ftpUtils.downloadFile("skills.txt");
+ FileUtil.writeFromStream(inputStream, "E:\\skills.txt");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return "SUCCESS";
+ }*/
+}
diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/CommonUtils.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/CommonUtils.java
new file mode 100644
index 0000000..583c252
--- /dev/null
+++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/CommonUtils.java
@@ -0,0 +1,20 @@
+package com.hisense.hiatmp.server_api.utils;
+
+import java.util.UUID;
+
+public class CommonUtils {
+ public static Double bearing(Double lat1, Double lon1, Double lat2, Double lon2){
+ double longitude1 = lon1;
+ double longitude2 = lon2;
+ double latitude1 = Math.toRadians(lat1);
+ double latitude2 = Math.toRadians(lat2);
+ double longDiff = Math.toRadians(longitude2-longitude1);
+ double y = Math.sin(longDiff)*Math.cos(latitude2);
+ double x = Math.cos(latitude1)*Math.sin(latitude2)-Math.sin(latitude1)*Math.cos(latitude2)*Math.cos(longDiff);
+ return (Math.toDegrees(Math.atan2(y, x))+360)%360;
+ }
+ public static String getUUID() {
+ String uuid = UUID.randomUUID().toString();
+ return uuid.replaceAll("-", "");
+ }
+}
diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/FTPUtils.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/FTPUtils.java
new file mode 100644
index 0000000..e384446
--- /dev/null
+++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/FTPUtils.java
@@ -0,0 +1,287 @@
+package com.hisense.hiatmp.server_api.utils;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.net.ftp.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Calendar;
+import java.util.Date;
+
+@Component
+@Data
+@Slf4j
+@Service
+public class FTPUtils {
+
+ public static final int imageCutSize = 300;
+
+ @Value("${spring.ftp.username}") //用户名
+ private String userName;
+
+ @Value("${spring.ftp.password}") //密码
+ private String passWord;
+
+ @Value("${spring.ftp.host}") //ip地址
+ private String ip;
+
+ @Value("${spring.ftp.port}") //端口号
+ private int port;
+
+ @Value("${spring.ftp.currentdir}")
+ private String CURRENT_DIR; // 文件存放的目录
+
+ @Value("${spring.ftp-http.url}")
+ private String ftpHttpUrl;
+ public static final String DIRSPLIT = "/";
+
+
+ private String DOWNLOAD_DIR;
+ private FTPClient ftpClient = new FTPClient();
+ //上传
+ public String uploadToFtp(InputStream buffIn, String fileName, boolean needDelete)
+ throws FTPConnectionClosedException, IOException, Exception {
+ boolean returnValue = false;
+ String url ="";
+ try {
+
+ // 建立连接
+ connectToServer();
+ // 设置传输二进制文件
+ setFileType(FTP.BINARY_FILE_TYPE);
+ int reply = ftpClient.getReplyCode();
+ if (!FTPReply.isPositiveCompletion(reply)) {
+ ftpClient.disconnect();
+ throw new IOException("failed to connect to the FTP Server:" + ip);
+ }
+ /*ftpClient.enterLocalPassiveMode();*/
+ //ftpClient.changeWorkingDirectory(CURRENT_DIR);
+ String date = DateUtil.format(new Date(),"yyyyMMdd");
+ //ftpClient.makeDirectory(CURRENT_DIR + "/" + date);
+ //进入文件目录
+ ftpClient.changeWorkingDirectory(CURRENT_DIR);
+ // 上传文件到ftp
+ returnValue = ftpClient.storeFile(fileName, buffIn);
+ if (needDelete) {
+ ftpClient.deleteFile(fileName);
+ }
+ // 输出操作结果信息
+ if (returnValue) {
+ System.out.println("uploadToFtp INFO: upload file to ftp : succeed!");
+ } else {
+ System.out.println("uploadToFtp INFO: upload file to ftp : failed!");
+ }
+ url = ftpHttpUrl + fileName;
+ buffIn.close();
+ // 关闭连接
+ closeConnect();
+ } catch (FTPConnectionClosedException e) {
+ System.out.println("ftp连接被关闭!");
+ throw e;
+ } catch (Exception e) {
+ returnValue = false;
+ System.out.println("ERR : upload file to ftp : failed! ");
+ throw e;
+ } finally {
+ try {
+ if (buffIn != null) {
+ buffIn.close();
+ }
+ } catch (Exception e) {
+ System.out.println("ftp关闭输入流时失败!");
+ }
+ if (ftpClient.isConnected()) {
+ closeConnect();
+ }
+ }
+ return url;
+ }
+
+ //上传
+ public boolean uploadToFtp(String[] path, boolean needDelete)
+ throws FTPConnectionClosedException, IOException, Exception {
+ boolean returnValue = false;
+
+ try {
+
+ // 建立连接
+ connectToServer();
+ // 设置传输二进制文件
+ setFileType(FTP.BINARY_FILE_TYPE);
+ int reply = ftpClient.getReplyCode();
+ if (!FTPReply.isPositiveCompletion(reply)) {
+ ftpClient.disconnect();
+ throw new IOException("failed to connect to the FTP Server:" + ip);
+ }
+ /*ftpClient.enterLocalPassiveMode();*/
+ //进入文件目录
+ ftpClient.changeWorkingDirectory(CURRENT_DIR);
+ for (String str : path){
+ File file = new File(str);
+ InputStream inputStream = FileUtil.getInputStream(file);
+ // 上传文件到ftp
+ String uuid = CommonUtils.getUUID();
+ returnValue = ftpClient.storeFile(uuid,inputStream);
+ if (needDelete) {
+ ftpClient.deleteFile(uuid);
+ }
+ // 输出操作结果信息
+ if (returnValue) {
+ System.out.println("uploadToFtp INFO: upload file to ftp : succeed!");
+ } else {
+ System.out.println("uploadToFtp INFO: upload file to ftp : failed!");
+ }
+ inputStream.close();
+ }
+
+ // 关闭连接
+ closeConnect();
+ } catch (FTPConnectionClosedException e) {
+ System.out.println("ftp连接被关闭!");
+ throw e;
+ } catch (Exception e) {
+ returnValue = false;
+ System.out.println("ERR : upload file to ftp : failed! ");
+ throw e;
+ } finally {
+ if (ftpClient.isConnected()) {
+ closeConnect();
+ }
+ }
+ return returnValue;
+ }
+
+ //下载
+ public InputStream downloadFile(String filename)
+ throws IOException {
+ InputStream in = null;
+ try {
+
+ // 建立连接
+ connectToServer();
+ ftpClient.enterLocalPassiveMode();
+ // 设置传输二进制文件
+ setFileType(FTP.BINARY_FILE_TYPE);
+ int reply = ftpClient.getReplyCode();
+ if (!FTPReply.isPositiveCompletion(reply)) {
+ ftpClient.disconnect();
+ throw new IOException("failed to connect to the FTP Server:" + ip);
+ }
+ ftpClient.changeWorkingDirectory(CURRENT_DIR);
+
+ // ftp文件获取文件
+ in = ftpClient.retrieveFileStream(filename);
+
+ } catch (FTPConnectionClosedException e) {
+ System.out.println("ftp连接被关闭!");
+ throw e;
+ } catch (Exception e) {
+ System.out.println("ERR : upload file " + filename + " from ftp : failed!");
+
+ }
+ return in;
+ }
+
+ private void setFileType(int fileType) {
+ try {
+ ftpClient.setFileType(fileType);
+ } catch (Exception e) {
+ System.out.println("ftp设置传输文件的类型时失败!");
+
+ }
+ }
+
+ public void closeConnect() {
+ try {
+ if (ftpClient != null) {
+ ftpClient.logout();
+ ftpClient.disconnect();
+ }
+ } catch (Exception e) {
+ System.out.println("ftp连接关闭失败!");
+
+ }
+ }
+
+ private void connectToServer() throws FTPConnectionClosedException, Exception {
+ if (!ftpClient.isConnected()) {
+ int reply;
+ try {
+ ftpClient = new FTPClient();
+ ftpClient.setControlEncoding("UTF-8");
+ ftpClient.enterLocalPassiveMode();
+ ftpClient.connect(ip, port);
+ ftpClient.login(userName, passWord);
+ reply = ftpClient.getReplyCode();
+
+ if (!FTPReply.isPositiveCompletion(reply)) {
+ ftpClient.disconnect();
+ System.out.println("connectToServer FTP server refused connection.");
+
+ }
+
+ } catch (FTPConnectionClosedException ex) {
+ System.out.println("没有连接数!there are too many connected users,please try later");
+
+ throw ex;
+ } catch (Exception e) {
+ System.out.println("登录ftp服务器失败");
+ throw e;
+ }
+ }
+ }
+
+ // Check the path is exist; exist return true, else false.
+ public boolean existDirectory(String path) throws IOException {
+ boolean flag = false;
+ FTPFile[] ftpFileArr = ftpClient.listFiles(path);
+ for (FTPFile ftpFile : ftpFileArr) {
+ if (ftpFile.isDirectory()
+ && ftpFile.getName().equalsIgnoreCase(path)) {
+ flag = true;
+ break;
+ }
+ }
+ return flag;
+ }
+
+ public boolean createDirectory(String pathName) throws IOException {
+ boolean isSuccess = false;
+ try {
+ isSuccess = ftpClient.makeDirectory(pathName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return isSuccess;
+ }
+
+ public static String getExtention(String fileName) {
+ int pos = fileName.lastIndexOf(".");
+ return fileName.substring(pos);
+ }
+
+ public static String getNoPointExtention(String fileName) {
+ int pos = fileName.lastIndexOf(".");
+ return fileName.substring(pos + 1);
+ }
+
+ public static String getDateDir(Date dateParam) {
+ Calendar cal = Calendar.getInstance();
+ if (null != dateParam) {
+ cal.setTime(dateParam);
+ }
+ int currentYear = cal.get(Calendar.YEAR);
+ int currentMouth = cal.get(Calendar.MONTH) + 1;
+ int currentDay = cal.get(Calendar.DAY_OF_MONTH);
+ //int currentHour = cal.get(Calendar.HOUR_OF_DAY);
+ //return currentYear+FtpOperation.DIRSPLIT+currentMouth+FtpOperation.DIRSPLIT+currentDay+FtpOperation.DIRSPLIT+currentHour;
+ return currentYear + FTPUtils.DIRSPLIT + currentMouth + FTPUtils.DIRSPLIT + currentDay;
+ }
+}
diff --git a/hiatmp-hidden-danger-server/src/main/resources/application.yml b/hiatmp-hidden-danger-server/src/main/resources/application.yml
index a7f7604..079c20b 100644
--- a/hiatmp-hidden-danger-server/src/main/resources/application.yml
+++ b/hiatmp-hidden-danger-server/src/main/resources/application.yml
@@ -1,12 +1,12 @@
server:
port: 8800
servlet:
- context-path: /HiatmpPro/commond
+ context-path: /HiatmpPro/hiddenDanger
#运行模式 开发环境:dev 测试环境:test 生产环境: production
run-mode: dev
spring:
application:
- name: urbantraffic-hiatmp-base
+ name: urbantraffic-hiatmp-hiddenDanger
servlet:
multipart:
max-file-size: 100MB
@@ -41,7 +41,17 @@ spring:
port: 6379
password: Hiface.1
timeout: 10000
-
+ #ftp配置
+ ftp:
+ username: ysz
+ password: ysz
+ host: localhost
+ port: 21
+ #currentdir: /ftpdate/hisense_ftp_directory/
+ currentdir: D:\ftpfile
+ ftp-http:
+ #url: http://53.101.226.90:8188/
+ url: http://53.101.226.90:8188/
pagehelper:
helper-dialect: postgresql
reasonable: true