我把用 MultipartFile 實現文件上傳封裝了一下。上傳文件之後自定義路徑並把修改文件名爲 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
@AllArgsConstructor
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 = "/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測試結果: