很多时候我们都需要进行文件上传和下载的操作,具体怎么实现网上的代码其实也是挺多的,刚好我的项目中也遇到了文件上传和下载的需求,本篇博文具体讲解上传操作,下篇博文讲解下载操作。
我们具体来想一想要将一个从前端传来的文件进行上传到本地,分几个步骤:
一、获取文件名称
二、通过UUID创建一个新的文件名称
三、创建一个目录
四、将文件存放在刚刚创建好的文件中进行储存
好了,思路有了,那接下来写代码只是时间问题:
private String uploadFile(MultipartFile file) throws IOException {
// 1、获取文件的原始文件名, 通过原始文件名获取文件后缀
String filename=file.getOriginalFilename();
String filetype=filename.substring(filename.lastIndexOf("."));
// 2、使用UUID重新生成文件名,防止文件名称重复造成文件覆盖
String newfilename = UUID.randomUUID().toString() + suffix;
// 3、创建一个目录对象
File file1=new File("E:/PictureTool/UploadFile/");
//判断当前目录是否存在,不存在则创建
if(!file1.exists()){
file1.mkdirs();
}
// 4、将文件上传到指定目录
try{
file.transferTo(new File("E:/PictureTool/UploadFile/"+newfilename));
System.out.println("文件上传成功");
return "E:/PictureTool/UploadFile/"+newfilename;
}
catch (Exception e){
e.printStackTrace();
System.out.println("文件上传失败");
return "文件上传失败";
}
}
建议路径可以写成一个常量方便后期管理和防止代码出错,我这里返回的是存放文件的绝对路径,因为我后面的代码需要用到,读者可以根据自己的需求进行修改。
同样的你也可以将存放路径写在yml文件中:
使用的话就直接使用@Value注解引入就可以了:
推荐将代码存放在yml中方便管理。
注:
因为我们点击上传其实是将文件临时保存到我们计算机的一个临时文件夹内,如果我们不将其转存,本次请求结束后,文件也会自动删除。