SpringBoot实现文件上传服务器全过程
作者:MrDJun
该文章详细描述了如何纯手工实现一个SpringBoot文件上传功能,包括引入必要的依赖、创建实体类、编写服务层代码、实现文件上传逻辑以及使用Controller进行测试,通过自定义文件路径和将文件名修改为UUID,有效避免了文件名重复的问题
无需任何工具类,纯手工实现SpringBoot上传服务器。上传文件之后自定义路径并把修改文件名为 UUID ,避免文件名重复。
下面我详细的把代码给出,照着我的详细流程,定能解决你的问题。
1、引入swagger 和 lombok
<!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>2、创建上传信息的实体类
@ApiModel(description = "处理后上传文件的信息")
@Data
@NoArgsConstructor
public class UploadInfo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "上传结果")
private String result;
@ApiModelProperty(value = "初始文件名")
private String beginFileName;
@ApiModelProperty(value = "最终上传文件名")
private String lastFileName;
@ApiModelProperty(value = "文件类型")
private String FileType;
@ApiModelProperty(value = "文件大小")
private String fileSize;
@ApiModelProperty(value = "文件上传的地址")
private String uploadUrl;
}3、在service层新建 UploadService
/**
* 上传文件接口
*
* @param file 上传的文件
* @param uploadFilePath 上传到服务器的路径
* @return 上传并处理后的信息
* @throws Exception 上传异常
*/
UploadInfo upload(MultipartFile file, String uploadFilePath) throws Exception;4、新建一个UploadServiceImpl
这是上面哪个Service的实现类。
@Service
public class UploadServiceImpl implements UploadService {
@Override
public UploadInfo upload(MultipartFile file, String uploadFilePath) throws Exception {
if (file.isEmpty())
return null;
UploadInfo uploadInfo = new UploadInfo();
String originalFilename;
String fileName;
originalFilename = file.getOriginalFilename();
fileName = UUID.randomUUID().toString() + file.getOriginalFilename();
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
long fileSize = file.getSize();
File packageFile = new File(uploadFilePath);
if (!packageFile.exists()) {
packageFile.mkdir();
}
File targetFile = new File(uploadFilePath + "/" + fileName);
file.transferTo(targetFile);
uploadInfo.setBeginFileName(originalFilename);
uploadInfo.setLastFileName(fileName);
uploadInfo.setFileType(fileType);
uploadInfo.setFileSize(Long.toString(fileSize));
uploadInfo.setUploadUrl(targetFile.toString());
uploadInfo.setResult("上传成功");
return uploadInfo;
}
}5、新建Controller测试
@Autowired
private UploadService uploadService;
private final static String UPLOAD_PATH = "C:/file";
@ApiOperation(value = "上传文件测试",notes = "请记得上传时加上参数 file !")
@PostMapping(value = "/uc/uploadFile",consumes= MediaType.MULTIPART_FORM_DATA_VALUE)
public UploadInfo uploadTest(@RequestParam("file") MultipartFile file){
UploadInfo uploadInfo = null;
try{
uploadInfo = uploadService.upload(file,UPLOAD_PATH);
}catch (Exception e){
System.out.println(e.toString());
}
return uploadInfo;
}PostMan测试结果:

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
