package com.bilibili.juc.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@RestController
@RequestMapping("upload")
public class UploadController {
public static final int AVATAR_MAX_SIZE = 10 * 1024 * 1024;
private final Logger logger = LoggerFactory.getLogger(UploadController.class);
public static final List<String> AVATAR_TYPES = new ArrayList<String>();
/** 初始化允许上传的头像的文件类型 */
static {
AVATAR_TYPES.add("image/jpeg");
AVATAR_TYPES.add("image/png");
AVATAR_TYPES.add("image/bmp");
AVATAR_TYPES.add("image/gif");
AVATAR_TYPES.add("text/plain");
AVATAR_TYPES.add("application/vnd.ms-excel");
AVATAR_TYPES.add("application/msword");
}
@RequestMapping("/uploadFile")
public String changeAvatar(@RequestParam("file") MultipartFile file) {
// 判断上传的文件是否为空
if (file.isEmpty()) {
logger.info("上传的头像文件不允许为空");
}
// 判断上传的文件大小是否超出限制值
if (file.getSize() > AVATAR_MAX_SIZE) { // getSize():返回文件的大小,以字节为单位
// 是:抛出异常
logger.info("不允许上传超过" + (AVATAR_MAX_SIZE / 1024) + "KB的头像文件");
}
// 判断上传的文件类型是否超出限制
String contentType = file.getContentType();
logger.info("文件类型contentType:{}", contentType);
if (!AVATAR_TYPES.contains(contentType)) {
// 是:抛出异常
logger.info("不允许上传超过" + ("不支持使用该类型的文件作为头像,允许的文件类型:" + AVATAR_TYPES));
}
// 获取当前项目的绝对磁盘路径
String parent = "D:\\upload";
// 保存头像文件的文件夹
File dir = new File(parent);
if (!dir.exists()) {
//若是文件路径不存在,就新建文件路径
dir.mkdirs();
}
// 保存的头像文件的文件名
String suffix = "";
String originalFilename = file.getOriginalFilename();
int index = originalFilename.indexOf(".");
if (index > 0) {
suffix = originalFilename.substring(index);
}
String filename = UUID.randomUUID().toString().toUpperCase() + suffix;
// 创建文件对象,表示保存的头像文件
File dest = new File(dir, filename);
try {
file.transferTo(dest);
} catch (IllegalStateException e) {
// 抛出异常
logger.info("文件状态异常,可能文件已被移动或删除");
} catch (IOException e) {
// 抛出异常
logger.info("上传文件时读写错误,请稍后重新尝试");
}
return "OK";
}
}
java文件上传工具类
最新推荐文章于 2024-08-29 10:43:49 发布