关于MultipartFile 文件上传
看一下MultipartFile源码
package org.springframework.web.multipart;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import org.springframework.core.io.InputStreamSource;
import org.springframework.core.io.Resource;
import org.springframework.lang.Nullable;
import org.springframework.util.FileCopyUtils;
public interface MultipartFile extends InputStreamSource {
String getName();
@Nullable
String getOriginalFilename();
@Nullable
String getContentType();
boolean isEmpty();
long getSize();
byte[] getBytes() throws IOException;
InputStream getInputStream() throws IOException;
default Resource getResource() {
return new MultipartFileResource(this);
}void transferTo(File var1) throws IOException, IllegalStateException;
default void transferTo(Path dest) throws IOException, IllegalStateException {
FileCopyUtils.copy(this.getInputStream(), Files.newOutputStream(dest));
}
}
(1)、getName方法
getName方法获取的是前后端约定的传入文件的参数的名称,在SpringBoot后台中则是通过@Param("uploadFile") 注解定义的内容。
(2)、getOriginalFileName方法
getOriginalFileName方法获取的是文件的完整名称,包括文件名称+文件拓展名。
(3)、getContentType方法
getContentType方法获取的是文件的类型,注意是文件的类型,不是文件的拓展名。
(4)、isEmpty方法
isEmpty方法用来判断传入的文件是否为空,如果为空则表示没有传入任何文件。
(5)、getSize方法
getSize方法用来获取文件的大小,单位是字节。
(6)、getBytes方法
getBytes方法用来将文件转换成一种字节数组的方式进行传输,会抛出IOException异常。
(7)、getInputStream方法
getInputStream方法用来将文件转换成输入流的形式来传输文件,会抛出IOException异常。
(8)、transferTo方法
transferTo方法用来将接收文件传输到给定目标路径,会抛出IOException、IllegalStateException异常。该方法在实际项目开发中使用较少。
来了解一下这个上传接口
controller控制
/**
* 图片上传服务窗口
*
* *
* @author ITwolf
* @date 2021/3/16
*/@Api(tags = "上传服务")
@RestController
@RequestMapping("/image")
@Slf4j
public class ImageUploadController {@Resource
private IUploadService uploadService;
@ApiOperation("上传")
@PostMapping("/upload")
public JsonResult upload(MultipartFile file) {
if (file.getSize() <= 0){
return JsonResult.build(CodeEnums.SYS_INPUT_ERROR);
}return JsonResult.ok(uploadService.upload(file));
}}
接口
IUploadService
/**
* *
* @author ITwolf
* @date 2021/2/26
*/
public interface IUploadService {ImageUploadRespDTO upload(MultipartFile file);
}
类实现接口
UploadServiceImpl
/**
* 上传接口
*
* *
* @author ITwolf
* @date 2021/2/26
*/
@Service
@Slf4j
public class UploadServiceImpl implements IUploadService {/**
* 上传文件默认地址
*/
@Value("${agreement.annexAddress.url:file/default/attachment/agreement}")
private String annexAddress;
@Override
public ImageUploadRespDTO upload(MultipartFile file) {
ImageUploadRespDTO dto = new ImageUploadRespDTO();
String originalFilename = file.getOriginalFilename();
String suffix = Objects.requireNonNull(originalFilename)
.substring(originalFilename.lastIndexOf(Const.POINT));
String fileName = RandomUtils.randomString() + suffix;
dto.setFileName(fileName);
dto.setLocalPath(String.format(ImageConst.LOCAL_PATH, DateUtil.today(), fileName));
dto.setPath(ImageConst.COS_PATH_HEADER + dto.getLocalPath());
dto.setSize(file.getSize());
dto.setUrl(COSUtils.getCdnUrl(dto.getPath()));
try {
COSUtils.putObject(dto.getPath(), file.getInputStream());
} catch (Exception e){
throw new ImageProcessException("上传失败!");
}return dto;
}}
返回的DTO
/**
* 图片上传数据返回对象
* *
* @author ITwolf
* @date 2021/2/26
*/
@ApiModel("图片上传数据返回对象")
@Data
public class ImageUploadRespDTO implements Serializable {
@ApiModelProperty(value = "https://www.it610.com/article/文件大小")
private Long size;
@ApiModelProperty(value = "https://www.it610.com/article/文件名")
private String fileName;
@ApiModelProperty(value = "https://www.it610.com/article/链接")
private String url;
@ApiModelProperty(value = "https://www.it610.com/article/相对路径")
private String path;
@ApiModelProperty(value = "https://www.it610.com/article/本地路径")
private String localPath;
}
本文是引用了腾讯云cos服务工具
【JAVA|MultipartFile文件上传】
推荐阅读
- java项目工具|oss与文件上传组件MultipartFile
- 人生不设限|计算机专业Java毕设怎么做
- 工作心得体会|【JAVA 】 23种设计模式详解
- Java面试题及答案整理|Java设计模式面试题及答案(持续更新。。。)
- 设计模式|Java设计模式-外观模式
- 深度学习&神经网络|Transformer解析与tensorflow代码解读
- 微软相关|C#的架构、框架、设计模式
- 微信小程序|毕业论文-基于微信小程序的图书馆管理系统设计与实现
- 微信小程序|微信小程序健康预约检查管理系统的开发与实现