文件上传代码实现
文件上传,页面端可以使用ElementUI提供的上传组件
<el-upload class="avatar-uploader" action="/common/upload" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeUpload" ref="upload"> <img v-if="imageUrl" :src="imageUrl" class="avatar"></img> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload>
新建一个CommonController类,负责文件的上传和下载(过滤器拦截,可将该路径添加到不需要处理的路径数组中"/common/**")
package com.itheima.controller;
import com.itheima.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;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {
@Value("${reggie.path}")
private String basePath;
/**
* 文件上传和下载
* @param file
* @return
*/
@PostMapping("/upload")
public R<String> upload(MultipartFile file){
//MultipartFile的参数名必须和前端传过来的数据中的name值相同
//file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件就会删除
log.info(file.toString());
//原始文件名
String name = file.getOriginalFilename();
//使用UUID重新生成文件名,防止文件名称重复造成文件覆盖
String suffix = name.substring(name.lastIndexOf("."));
String fileName = UUID.randomUUID().toString() + suffix;
//创建一个目录对象
File dir = new File(basePath);
//判断当前目录是否存在
if(!dir.exists()){
//目录不存在,需要创建
dir.mkdirs();
}
try {
//将临时文件转存到指定位置,转存路径可在配置文件中配置
file.transferTo(new File(basePath + fileName));
} catch (IOException e) {
e.printStackTrace();
}
return R.success(fileName);
}
}