文件上传和下载其实并没用那么复杂,有一个非常好用的工具就已经给我们写好了前期的准备工作我们只需要在浏览器上面搜索Element-UI即可,然后在组件库中寻找Upload 上传这个组件,将里面的素材下载出来,下载出来的素材只需要放在我们项目的js目录中即可
我这边选择的是用户头像上传,其实其它的上传也是一样的方法
然后再将下载好的文件放入我们的资源文件中
等这些工作准备完毕之后我们就可以编写代码了
import com.itheima.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
* 文件上传和下载
*/
@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {
@Value("${reggie.path}")
private String classPath;
/**
* 文件上传
* @param file
* @return
*/
@PostMapping("/upload")
public R<String> upload(MultipartFile file){
log.info(file.toString());
return null;
}
}
写完这串代码后我们去执行,此时我们上传的文件就会给我们存放到一个临时文件中,当我们的项目请求结束之后,我们的临时文件也会随之删除
我的临时文件存放位置,当本次请求结束后我们文件也会随之消失,这时我们就需要将文件存放到我们指定的文件夹中,以免消失不见,这时我们就需要在yml配置文件中配置存放地址
server:
port: 8080
spring:
application:
#应用的名称
name: reggie_take_out
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 123456
mybatis-plus:
configuration:
#在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: ASSIGN_ID
reggie:
path: D:\img\
reggie:
path: D:\img\ 这个就是我所存放的图片路径
/**
* 文件上传
* @param file
* @return
*/
@PostMapping("/upload")
public R<String> upload(MultipartFile file){
//file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件会删除
log.info(file.toString());
//原始文件名
String originalFilename=file.getOriginalFilename();
String suffix=originalFilename.substring(originalFilename.lastIndexOf("."));
//使用UUID重新生成文件名,防止文件名称重复造成文件覆盖
String fileName= UUID.randomUUID().toString()+suffix;
//创建一个目录对象
File dir=new File(classPath);
if (!dir.exists()){
//目录不存在,需要创建
dir.mkdirs();
}
try {
//临时文件转存到指定位置
file.transferTo(new File(classPath+fileName));
}catch (IOException e){
e.printStackTrace();
}
return R.success("文件上传成功!");
}
此时我们就需要将代码进一步完善,运行完之后,观察我们的存放路径就可知
这时我们文件就添加成功了!!!