java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot文件上传服务器

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测试结果:

总结

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

您可能感兴趣的文章:
阅读全文