首先编写controller层
@RestController
@RequestMapping("upload")
public class UploadController {
@Autowired
private UploadService uploadService;
/**
* 文件上传
* @param file
* @return
*/
@PostMapping("image")
public ResponseEntity<String> uploadImage(@RequestParam("file")MultipartFile file){
System.out.println("=====================================文件上传"+file.getOriginalFilename());
return ResponseEntity.ok(uploadService.uploadImage(file));
}
}
service层,在service层对文件进行处理
@Service
@Slf4j
public class UploadService {
private static final List<String> ALLOW_TYPES = Arrays.asList("image/jpeg","image/png","image/gif");
public String uploadImage(MultipartFile file) {
try {
//文件类型校验
String type = file.getContentType();
if (!ALLOW_TYPES.contains(type)){
throw new LyException(ExceptionEnum.IMAGE_FILE_TYPE);
}
//文件内容校验
BufferedImage image = ImageIO.read(file.getInputStream());
if (image == null){
throw new LyException(ExceptionEnum.IMAGE_FILE_TYPE);
}
//保存文件到本地
File dist = new File("F:\\BaiduNetdiskDownload\\upload",file.getOriginalFilename());
file.transferTo(dist);
return "Http://image.leyou.com/" + file.getOriginalFilename();
} catch (IOException e) {
log.error("上传文件失败",e);
throw new LyException(ExceptionEnum.BRAND_NOT_FOUND);
}
//返回路劲
}
}
最后返回的是文件的路劲
在Nginx的配置文件中添加,可以跳过zuul的缓存,但还是会通过zuul网关
# 上传路径的映射
location /api/upload {
rewrite "^/(.*)$" /zuul/$1; #匹配/后面的一切
}
Nginx的优先级规范:
路劲越准确的优先级越高,并不是看谁在前
/ 的优先级是最低的
-
增值表达式:
-
() 是分组
-
. 任意
-
*数量