文件上传在没接触之前我一直以为很麻烦,学习的时候看博客鱼龙混杂,很多都是失败案例就传上来了看得我很头疼,下面是成功上传了的代码
工具类
用于返回数据
public class Resp<E> {
private String code;
private String message;
private E body;
public Resp(String code,String message,E body){
this.code = code;
this.message = message;
this.body = body;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public E getBody() {
return body;
}
public void setBody(E body) {
this.body = body;
}
public static <E> Resp<E> success(E body){
return new Resp("200","",body);
}
public static <E> Resp<E> fail(String code,String message){
return new Resp(code,message,(Object)null);
}
}
Service
public interface LoginService {
Resp<String> upload(MultipartFile file);
}
ServiceImpl
@Service
public class LoginServiceImpl implements LoginService {
@Override
public Resp<String> upload(MultipartFile file) {
if (file.isEmpty()){
return Resp.fail("400","文件为空");
}
//获取原始文件名(带有扩展名)
String originalFilename = file.getOriginalFilename();
//自己定义一个新名字(存在服务器上的文件名)
String fileName = System.currentTimeMillis()+ "."+ originalFilename.substring(originalFilename.lastIndexOf(".")+1);
//文件存放位置
String filePath = "D:\\2021java高级学习\\";
System.out.println("-----------------------------------");
System.out.println(filePath);
System.out.println("-----------------------------------");
//创建在硬盘上的文件
File dest = new File(filePath+fileName);
System.out.println("-----------------------------------");
System.out.println(dest);
System.out.println("-----------------------------------");
//判断是否存在目录
if (dest.getParentFile().exists()){
//不存在则创建文件夹
dest.getParentFile().mkdir();
}
//不一定成功所以放在try里
try {
file.transferTo(dest);
}catch (Exception e){
e.printStackTrace();
return Resp.fail("500",originalFilename+"上传失败");
}
return Resp.success(fileName);
}
}
上面文字存放路径的两个反斜杠是因为第一个是用来解析的输出之后是
Controller
@RestController
@RequestMapping(value = "/login")
public class LoginController {
@Autowired
private LoginService loginService;
@PostMapping(value = "/upload")
private Resp<String> upload(@RequestParam("file")MultipartFile file){
return loginService.upload(file);
}
}
postman调试
file那里要选File,然后就上传成功了