|
|
@ -10,6 +10,327 @@ import java.io.File;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.UUID;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* @Author swg.
|
|
|
|
|
|
|
|
* @Date 2019/1/3 19:13
|
|
|
|
|
|
|
|
* @CONTACT 317758022@qq.com
|
|
|
|
|
|
|
|
* @DESC
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
|
|
|
public class FileServiceImpl implements IFileService{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public String upload(MultipartFile file, String path) {
|
|
|
|
|
|
|
|
String fileName = file.getOriginalFilename();
|
|
|
|
|
|
|
|
//扩展名
|
|
|
|
|
|
|
|
//abc.jpg
|
|
|
|
|
|
|
|
String fileExtensionName = fileName.substring(fileName.lastIndexOf(".")+1);
|
|
|
|
|
|
|
|
String uploadFileName = UUID.randomUUID().toString()+"."+fileExtensionName;
|
|
|
|
|
|
|
|
log.info("开始上传文件,上传文件的文件名:{},上传的路径:{},新文件名:{}",fileName,path,uploadFileName);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File fileDir = new File(path);
|
|
|
|
|
|
|
|
if(!fileDir.exists()){
|
|
|
|
|
|
|
|
fileDir.setWritable(true);
|
|
|
|
|
|
|
|
fileDir.mkdirs();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.info("【文件上传路径为:{}】",fileDir);
|
|
|
|
|
|
|
|
File targetFile = new File(path,uploadFileName);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
file.transferTo(targetFile);
|
|
|
|
|
|
|
|
//文件已经上传成功了
|
|
|
|
|
|
|
|
log.info("【文件上传本地服务器成功】");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FtpUtil.uploadFile(Lists.newArrayList(targetFile));
|
|
|
|
|
|
|
|
//已经上传到ftp服务器上
|
|
|
|
|
|
|
|
log.info("【文件上传到文件服务器成功】");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
targetFile.delete();
|
|
|
|
|
|
|
|
log.info("【删除本地文件】");
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
log.error("上传文件异常",e);
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//A:abc.jpg
|
|
|
|
|
|
|
|
//B:abc.jpg
|
|
|
|
|
|
|
|
return targetFile.getName();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
package com.njupt.swg.service;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
|
|
|
import com.njupt.swg.common.utils.FtpUtil;
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* @Author swg.
|
|
|
|
|
|
|
|
* @Date 2019/1/3 19:13
|
|
|
|
|
|
|
|
* @CONTACT 317758022@qq.com
|
|
|
|
|
|
|
|
* @DESC
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
|
|
|
public class FileServiceImpl implements IFileService{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public String upload(MultipartFile file, String path) {
|
|
|
|
|
|
|
|
String fileName = file.getOriginalFilename();
|
|
|
|
|
|
|
|
//扩展名
|
|
|
|
|
|
|
|
//abc.jpg
|
|
|
|
|
|
|
|
String fileExtensionName = fileName.substring(fileName.lastIndexOf(".")+1);
|
|
|
|
|
|
|
|
String uploadFileName = UUID.randomUUID().toString()+"."+fileExtensionName;
|
|
|
|
|
|
|
|
log.info("开始上传文件,上传文件的文件名:{},上传的路径:{},新文件名:{}",fileName,path,uploadFileName);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File fileDir = new File(path);
|
|
|
|
|
|
|
|
if(!fileDir.exists()){
|
|
|
|
|
|
|
|
fileDir.setWritable(true);
|
|
|
|
|
|
|
|
fileDir.mkdirs();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.info("【文件上传路径为:{}】",fileDir);
|
|
|
|
|
|
|
|
File targetFile = new File(path,uploadFileName);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
file.transferTo(targetFile);
|
|
|
|
|
|
|
|
//文件已经上传成功了
|
|
|
|
|
|
|
|
log.info("【文件上传本地服务器成功】");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FtpUtil.uploadFile(Lists.newArrayList(targetFile));
|
|
|
|
|
|
|
|
//已经上传到ftp服务器上
|
|
|
|
|
|
|
|
log.info("【文件上传到文件服务器成功】");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
targetFile.delete();
|
|
|
|
|
|
|
|
log.info("【删除本地文件】");
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
log.error("上传文件异常",e);
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//A:abc.jpg
|
|
|
|
|
|
|
|
//B:abc.jpg
|
|
|
|
|
|
|
|
return targetFile.getName();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
package com.njupt.swg.service;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
|
|
|
import com.njupt.swg.common.utils.FtpUtil;
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* @Author swg.
|
|
|
|
|
|
|
|
* @Date 2019/1/3 19:13
|
|
|
|
|
|
|
|
* @CONTACT 317758022@qq.com
|
|
|
|
|
|
|
|
* @DESC 该类实现了IFileService接口,主要用于处理文件上传相关的业务逻辑,
|
|
|
|
|
|
|
|
* 包括将上传的文件保存到本地临时目录,再上传到FTP服务器,最后删除本地临时文件等操作。
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
|
|
|
public class FileServiceImpl implements IFileService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 实现文件上传的方法,接收一个MultipartFile类型的文件对象和一个文件存储路径参数。
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param file 要上传的文件对象,由前端传入的文件数据封装而成。
|
|
|
|
|
|
|
|
* @param path 文件存储的路径,指定了文件应该存储在本地的哪个目录下,后续也会基于此路径操作FTP上传等。
|
|
|
|
|
|
|
|
* @return 返回上传到FTP服务器后的文件名,如果上传过程出现异常则返回null。
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public String upload(MultipartFile file, String path) {
|
|
|
|
|
|
|
|
// 获取上传文件的原始文件名,例如:abc.jpg
|
|
|
|
|
|
|
|
String fileName = file.getOriginalFilename();
|
|
|
|
|
|
|
|
// 提取文件的扩展名,即从文件名中获取最后一个点(.)之后的部分,比如对于abc.jpg,获取到的是jpg。
|
|
|
|
|
|
|
|
// 作用是后续生成新文件名时用于保持文件类型一致。
|
|
|
|
|
|
|
|
// abc.jpg
|
|
|
|
|
|
|
|
String fileExtensionName = fileName.substring(fileName.lastIndexOf(".") + 1);
|
|
|
|
|
|
|
|
// 使用UUID(通用唯一识别码)生成一个唯一的字符串,并拼接上文件扩展名,形成新的文件名。
|
|
|
|
|
|
|
|
// 这样可以保证每次上传的文件名都是唯一的,避免文件名冲突问题。
|
|
|
|
|
|
|
|
String uploadFileName = UUID.randomUUID().toString() + "." + fileExtensionName;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.info("开始上传文件,上传文件的文件名:{},上传的路径:{},新文件名:{}", fileName, path, uploadFileName);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 根据传入的路径创建一个File对象,代表本地的文件目录。
|
|
|
|
|
|
|
|
File fileDir = new File(path);
|
|
|
|
|
|
|
|
// 判断该目录是否存在,如果不存在则进行创建目录操作。
|
|
|
|
|
|
|
|
// 先设置目录可写权限(有些系统可能需要显式设置),然后创建多层级目录(mkdirs会创建所有不存在的父目录)。
|
|
|
|
|
|
|
|
if (!fileDir.exists()) {
|
|
|
|
|
|
|
|
fileDir.setWritable(true);
|
|
|
|
|
|
|
|
fileDir.mkdirs();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.info("【文件上传路径为:{}】", fileDir);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 创建一个代表目标文件的File对象,其路径是由前面传入的path和新生成的文件名组成,
|
|
|
|
|
|
|
|
// 这个文件就是即将要把上传的文件保存到本地的目标文件。
|
|
|
|
|
|
|
|
File targetFile = new File(path, uploadFileName);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
// 将上传的MultipartFile文件内容传输并保存到本地的目标文件中,完成本地临时文件的保存。
|
|
|
|
|
|
|
|
file.transferTo(targetFile);
|
|
|
|
|
|
|
|
// 文件已经上传成功保存到本地临时服务器了,记录日志信息。
|
|
|
|
|
|
|
|
log.info("【文件上传本地服务器成功】");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用FtpUtil工具类的uploadFile方法,将本地保存好的文件(这里包装成一个包含该文件的列表)上传到FTP服务器上。
|
|
|
|
|
|
|
|
// 具体FtpUtil类内部如何实现FTP上传逻辑这里暂不详细展示,但它完成了向FTP服务器传输文件的功能。
|
|
|
|
|
|
|
|
FtpUtil.uploadFile(Lists.newArrayList(targetFile));
|
|
|
|
|
|
|
|
// 文件已经成功上传到FTP文件服务器了,记录日志信息。
|
|
|
|
|
|
|
|
log.info("【文件上传到文件服务器成功】");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 删除本地已经上传到FTP服务器的临时文件,释放本地磁盘空间,因为已经不需要在本地保留该文件副本了。
|
|
|
|
|
|
|
|
targetFile.delete();
|
|
|
|
|
|
|
|
log.info("【删除本地文件】");
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
// 如果在文件上传过程(包括保存到本地、上传到FTP服务器等操作涉及到的IO操作)出现异常,
|
|
|
|
|
|
|
|
// 则记录错误日志信息,并返回null表示上传失败。
|
|
|
|
|
|
|
|
log.error("上传文件异常", e);
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 返回上传到FTP服务器后的文件名,这个文件名可能在后续业务中用于记录、关联等操作。
|
|
|
|
|
|
|
|
// 例如,在数据库中记录该文件在FTP服务器上的存储名称等情况。
|
|
|
|
|
|
|
|
return targetFile.getName();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
package com.njupt.swg.service;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
|
|
|
import com.njupt.swg.common.utils.FtpUtil;
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* FileServiceImpl类实现了IFileService接口,是用于处理文件上传相关业务逻辑的服务实现类。
|
|
|
|
|
|
|
|
* 它负责接收上传的文件(MultipartFile类型)以及指定的文件上传路径,完成将文件保存到本地服务器临时目录,并进一步上传到FTP服务器(通过FtpUtil工具类)的操作,
|
|
|
|
|
|
|
|
* 最后删除本地临时文件,返回上传后文件在服务器上对应的文件名(可用于后续访问文件等操作),整个过程中通过日志记录关键步骤和异常情况,方便后续的调试与维护。
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @Author swg.
|
|
|
|
|
|
|
|
* @Date 2019/1/3 19:13
|
|
|
|
|
|
|
|
* @CONTACT 317758022@qq.com
|
|
|
|
|
|
|
|
* @DESC
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
|
|
|
// @Service注解用于标记该类是Spring框架中的一个服务层组件,意味着这个类会被Spring容器管理,在其他地方(如控制层)可以通过依赖注入的方式使用这个类的实例,
|
|
|
|
|
|
|
|
// 同时Spring会对其进行相关的生命周期管理以及一些配置和增强操作(如AOP切面等,若有配置的话),方便业务逻辑的组织和复用。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
|
|
|
// 使用Lombok的 @Slf4j注解自动生成名为log的SLF4J日志记录器,用于在文件上传的各个步骤中记录关键信息(如文件名称、路径等)以及出现异常情况时记录详细的错误信息,
|
|
|
|
|
|
|
|
// 方便后续查看日志来了解文件上传的执行情况,排查可能出现的问题,例如文件上传失败的原因、是否成功传输到FTP服务器等情况。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class FileServiceImpl implements IFileService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 实现文件上传功能的方法,接收一个MultipartFile类型的文件对象以及表示文件上传路径的字符串参数,完成文件上传相关的一系列操作。
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param file 表示要上传的文件对象,是MultipartFile类型,它是Spring框架中用于处理文件上传的接口类型,
|
|
|
|
|
|
|
|
* 可以获取文件的原始名称、文件内容等信息,通过这个对象传递从客户端上传过来的文件数据,方便后续进行保存、传输等操作。
|
|
|
|
|
|
|
|
* @param path 表示文件上传的目标路径,是一个字符串类型的参数,指定了文件要保存到本地服务器以及后续上传到FTP服务器的基础路径,
|
|
|
|
|
|
|
|
* 例如可以是服务器上的某个特定目录(如 "/upload" 等),需要确保这个路径在服务器上是可写的,并且符合项目对于文件存储位置的规划和要求。
|
|
|
|
|
|
|
|
* @return String 返回值是一个字符串,代表上传后文件在服务器上对应的文件名(通常经过了重命名等处理),
|
|
|
|
|
|
|
|
* 这个文件名可用于后续在系统中构建文件的访问链接、记录文件存储信息等操作,若文件上传过程中出现异常情况,则返回null,表示上传失败。
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public String upload(MultipartFile file, String path) {
|
|
|
|
|
|
|
|
String fileName = file.getOriginalFilename();
|
|
|
|
|
|
|
|
// 获取上传文件的原始文件名,这个文件名是客户端上传文件时原本的名称,例如客户端上传了一个名为 "abc.jpg" 的图片文件,这里获取到的就是 "abc.jpg",
|
|
|
|
|
|
|
|
// 通过这个原始文件名可以提取文件的扩展名等信息,用于后续生成新的文件名以及进行相关的文件操作判断等情况。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//扩展名
|
|
|
|
|
|
|
|
//abc.jpg
|
|
|
|
|
|
|
|
String fileExtensionName = fileName.substring(fileName.lastIndexOf(".") + 1);
|
|
|
|
|
|
|
|
// 从原始文件名中提取文件的扩展名,通过查找文件名中最后一个 "." 出现的位置,然后取其后面的字符串部分,得到文件的扩展名,
|
|
|
|
|
|
|
|
// 例如对于文件名 "abc.jpg",通过该操作获取到的扩展名就是 "jpg",用于后续构建新的文件名(确保新文件名保留正确的文件类型扩展名),便于识别文件类型以及正确的访问和处理文件。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String uploadFileName = UUID.randomUUID().toString() + "." + fileExtensionName;
|
|
|
|
|
|
|
|
// 使用Java的UUID(通用唯一识别码)生成一个随机的字符串,并与获取到的文件扩展名拼接起来,组成新的文件名,
|
|
|
|
|
|
|
|
// 这样做的目的是为了避免文件名冲突(特别是在多用户同时上传文件或者重复上传同名文件的情况下),确保每个上传的文件在服务器上有一个唯一的标识名称,
|
|
|
|
|
|
|
|
// 例如生成的新文件名可能类似 "550e8400-e29b-41d4-a716-446655440000.jpg",方便后续文件的存储、管理以及访问操作。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.info("开始上传文件,上传文件的文件名:{},上传的路径:{},新文件名:{}", fileName, path, uploadFileName);
|
|
|
|
|
|
|
|
// 使用日志记录器记录文件上传操作开始时的关键信息,包括原始文件名、上传的目标路径以及生成的新文件名,方便后续查看日志了解文件上传的初始情况,
|
|
|
|
|
|
|
|
// 同时在出现问题时也可以通过这些记录来排查是哪个文件在哪个路径下上传出现了异常等情况。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File fileDir = new File(path);
|
|
|
|
|
|
|
|
if (!fileDir.exists()) {
|
|
|
|
|
|
|
|
fileDir.setWritable(true);
|
|
|
|
|
|
|
|
fileDir.mkdirs();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 根据传入的文件上传路径创建一个File对象,用于表示对应的目录,如果该目录不存在,则先设置其可写权限(确保后续可以创建文件等操作),
|
|
|
|
|
|
|
|
// 然后通过mkdirs方法创建该目录及其所有必要的父目录(如果不存在的话),保证文件上传时有对应的本地存储目录可用,避免因目录不存在导致文件保存失败的情况。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.info("【文件上传路径为:{}】", fileDir);
|
|
|
|
|
|
|
|
// 使用日志记录创建好的文件上传路径对应的File对象信息,方便后续查看实际使用的文件存储目录情况,确认目录是否创建正确以及是否符合预期等情况,
|
|
|
|
|
|
|
|
// 也有助于排查可能因目录问题导致的文件上传异常情况。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File targetFile = new File(path, uploadFileName);
|
|
|
|
|
|
|
|
// 根据文件上传路径和新生成的文件名创建一个用于保存上传文件的目标File对象,这个对象代表了文件在本地服务器上最终要保存的位置和对应的文件名,
|
|
|
|
|
|
|
|
// 后续会将上传的文件内容写入到这个目标文件中,完成文件在本地服务器的临时存储操作。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
file.transferTo(targetFile);
|
|
|
|
|
|
|
|
// 将上传的MultipartFile对象中的文件内容传输并保存到之前创建的本地目标文件(targetFile)中,
|
|
|
|
|
|
|
|
// 这个操作会将客户端上传的文件数据实际写入到服务器本地的文件系统中,完成文件在本地服务器的临时存储,如果这个过程出现I/O异常等问题,会抛出IOException异常,
|
|
|
|
|
|
|
|
// 例如文件权限不足、磁盘空间不足等原因可能导致传输失败,需要在catch块中进行相应的异常处理。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//文件已经上传成功了
|
|
|
|
|
|
|
|
log.info("【文件上传本地服务器成功】");
|
|
|
|
|
|
|
|
// 使用日志记录文件成功上传到本地服务器的信息,方便后续查看文件上传的执行进度以及确认本地存储这一步是否成功完成,
|
|
|
|
|
|
|
|
// 若后续出现问题(如无法上传到FTP服务器等情况),可以通过这个记录来判断是否是本地存储环节之后出现的问题。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FtpUtil.uploadFile(Lists.newArrayList(targetFile));
|
|
|
|
|
|
|
|
// 调用FtpUtil工具类的uploadFile方法,将包含目标文件(targetFile)的列表传递进去,执行将文件上传到FTP服务器的操作,
|
|
|
|
|
|
|
|
// FtpUtil类应该是专门用于处理FTP文件传输相关逻辑的工具类,通过它实现与FTP服务器的连接、文件上传等功能,若这个过程出现异常(如FTP连接失败、权限问题等),
|
|
|
|
|
|
|
|
// 会在FtpUtil内部进行相应的处理(可能记录日志、抛出异常等情况,具体取决于FtpUtil的实现),这里只是调用其方法来触发上传到FTP服务器的操作。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//已经上传到ftp服务器上
|
|
|
|
|
|
|
|
log.info("【文件上传到文件服务器成功】");
|
|
|
|
|
|
|
|
// 使用日志记录文件成功上传到FTP服务器的信息,表明文件已经从本地服务器进一步传输到了FTP服务器上,完成了整个文件上传流程中的关键步骤,
|
|
|
|
|
|
|
|
// 通过这个记录可以方便后续查看文件是否完整地按照预期上传到了指定的FTP服务器,若出现问题(如文件在FTP服务器上不可访问等情况),可以据此排查是FTP上传环节出现的问题。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
targetFile.delete();
|
|
|
|
|
|
|
|
log.info("【删除本地文件】");
|
|
|
|
|
|
|
|
// 在文件成功上传到FTP服务器后,删除本地临时保存的文件,以释放本地服务器的磁盘空间,避免不必要的文件冗余存储,
|
|
|
|
|
|
|
|
// 通过这个操作,本地服务器只起到一个临时中转存储的作用,最终文件存储在FTP服务器上,而本地只保留相关的文件上传记录(如文件名等信息,用于后续访问等操作)。
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
log.error("上传文件异常", e);
|
|
|
|
|
|
|
|
// 如果在文件上传过程(包括本地保存或者上传到FTP服务器等操作)中出现IOException异常,使用日志记录器记录详细的错误信息,包括异常堆栈信息,
|
|
|
|
|
|
|
|
// 方便后续查看日志来排查具体是哪个环节出现了I/O相关的问题,例如是文件传输失败、FTP连接异常还是其他文件操作异常等情况,同时返回null表示文件上传失败。
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//A:abc.jpg
|
|
|
|
|
|
|
|
//B:abc.jpg
|
|
|
|
|
|
|
|
return targetFile.getName();
|
|
|
|
|
|
|
|
// 返回上传后文件在服务器上对应的文件名(这里是经过重命名后的新文件名,即之前生成的uploadFileName),
|
|
|
|
|
|
|
|
// 这个文件名可以在其他地方(如数据库中记录、返回给前端用于构建文件访问链接等)使用,用于标识和访问已经上传到FTP服务器上的文件,完成文件上传操作并返回相应的文件名结果。
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
package com.njupt.swg.service;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
|
|
|
import com.njupt.swg.common.utils.FtpUtil;
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* FileServiceImpl类实现了IFileService接口,是用于处理文件上传相关业务逻辑的服务实现类。
|
|
|
|
* FileServiceImpl类实现了IFileService接口,是用于处理文件上传相关业务逻辑的服务实现类。
|
|
|
|
* 它负责接收上传的文件(MultipartFile类型)以及指定的文件上传路径,完成将文件保存到本地服务器临时目录,并进一步上传到FTP服务器(通过FtpUtil工具类)的操作,
|
|
|
|
* 它负责接收上传的文件(MultipartFile类型)以及指定的文件上传路径,完成将文件保存到本地服务器临时目录,并进一步上传到FTP服务器(通过FtpUtil工具类)的操作,
|
|
|
|