Java实现图片文件上传

32次阅读

共计 4209 个字符,预计需要花费 11 分钟才能阅读完成。

Java 实现后台图片上传,将上传图片的接口进行分层,便于维护接口。

接口部分(interface)

将接口分为单图片上传以及多图片上传

public interface FileUploadService {

// 单图片上传

PicUploadResult uplodadImg(MultipartFile uploadFile, HttpServletRequest request);

// 多图片上传

PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request);

}

接口实现类(interface impl)

上传图片方法类(主要)

上传多个图片只是使用了数组的方式将文件存到 MultipartFile 里面。以防代码冗余,所以将实现方法抽出来

/**

* 上传图片方法类

* @param multipartFile

* @param request

* @return

*/

private PicUploadResult uploadImgMethod(MultipartFile multipartFile, HttpServletRequest request) {

PicUploadResult picUploadResult = new PicUploadResult();

if (multipartFile.isEmpty()) {

// 返回选择文件提示

picUploadResult.setLegal(false);

return picUploadResult;

}

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd/”);

String format = sdf.format(new Date());

// 存放上传文件的文件夹

File file = new File(baseFilePath + format);

logger.info(“———– 存放上传文件的文件夹【” + file + “】———–“);

logger.info(“———– 输出文件夹绝对路径 — 这里的绝对路径是相当于当前项目的路径而不是“容器”路径【” + file.getAbsolutePath() + “】———–“);

if (!file.isDirectory()) {

// 递归生成文件夹

file.mkdirs();

}

// 获取原始的名字 original: 最初的,起始的 方法是得到原来的文件名在客户机的文件系统名称

String oldName = multipartFile.getOriginalFilename();

logger.info(“———– 文件原始的名字【” + oldName + “】———–“);

String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf(“.”), oldName.length());

logger.info(“———– 文件要保存后的新名字【” + newName + “】———–“);

try {

// 构建真实的文件路径

File newFile = new File(file.getAbsolutePath() + File.separator + newName);

// 转存文件到指定路径,如果文件名重复的话,将会覆盖掉之前的文件, 这里是把文件上传到“绝对路径”

multipartFile.transferTo(newFile);

String filePath = request.getScheme() + “://” + request.getServerName() + “:” + request.getServerPort() + “/picbook/” + UPLOAD_PATH_PREFIX + format + newName;

logger.info(“———–【” + filePath + “】———–“);

picUploadResult.setLegal(true);

picUploadResult.setImgPath(filePath);

return picUploadResult;

} catch (Exception e) {

e.printStackTrace();

}

picUploadResult.setLegal(false);

return picUploadResult;

}

esult uplodadImg(MultipartFile multipartFile, HttpServletRequest request) {

return uploadImgMethod(multipartFile, request);

}

多图片上传
外汇经纪商动态 http://www.fx61.com/news

public PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request) {

List imgPaths = new ArrayList<>();

for (MultipartFile multipartFile : uploadFile) {

PicUploadResult picUploadResult = uploadImgMethod(multipartFile, request);

if(picUploadResult.isLegal()){

imgPaths.add(picUploadResult.getImgPath());

}else{

return picUploadResult;

}

}

PicUploadResult picUploadResult = new PicUploadResult();

picUploadResult.setLegal(true);

picUploadResult.setImgPahts(imgPaths);

return picUploadResult;

}

实现方法补充

// 项目上传至绝对路径(在 yml 里配置你的项目绝对路径)

@Value(“${file.save-path}”)

private String baseFilePath;

// 项目根路径下的目录 — SpringBoot static 目录相当于是根路径下(SpringBoot 默认)

private final static String UPLOAD_PATH_PREFIX = “statics/uploadFile/”;

控制层

public class FileUploadController {

// 允许上传的格式 图片形式

private static final String[] IMAGE_TYPE = new String[]{“.bmp”, “.jpg”, “.jpeg”, “.png”};

@Resource

private FileUploadService fileUploadService;

@PostMapping(“/uploadImg”)

public R uploadImg(@RequestParam(“file”) MultipartFile file, HttpServletRequest request) {

boolean isFlag = false;

for (String type : IMAGE_TYPE) {

System.out.println(file.getOriginalFilename());

if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), type)) {

isFlag = true;

break;

}

}

if (isFlag) {

PicUploadResult picUploadResult = fileUploadService.uplodadImg(file, request);

boolean isLegal = picUploadResult.isLegal();

if (isLegal) {

Map resMap = new HashMap<>();

resMap.put(“imgPath”, picUploadResult.getImgPath());

return R.ok(resMap);

} else {

return R.error(“ 图片上传有误 ”);

}

} else {

return R.error(“ 上传的图片格式必须为:bmp,jpg,jpeg,png”);

}

}

@PostMapping(“/uploadManyImg”)

public R uploadManyImg(@RequestParam(“files”) MultipartFile[] files, HttpServletRequest request) {

boolean isFlag = false;

for (MultipartFile uploadFile : files) {

for (String type : IMAGE_TYPE) {

if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {

isFlag = true;

break;

}

}

}

if (isFlag) {

PicUploadResult picUploadResult = fileUploadService.uploadManyImg(files, request);

boolean isLegal = picUploadResult.isLegal();

if (isLegal) {

Map resMap = new HashMap<>();

resMap.put(“imgPaths”, picUploadResult.getImgPahts());

return R.ok(resMap);

} else {

return R.error(“ 图片上传有误 ”);

}

} else {

return R.error(“ 上传的图片格式必须为:bmp,jpg,jpeg,png”);

}

}

}

工具类

根据实际情况添加所需的字段

public class PicUploadResult

{

private boolean isLegal;

private String imgPath;

private List imgPahts;

}

正文完
 0