SpringBoot上传文件
废话不多说直接上代码
package com.ynjs.controller;
import com.ynjs.common.exception.CustomException;
import com.ynjs.common.jwt.JwtTokenUtils;
import com.ynjs.common.result.Result;
import com.ynjs.mapper.BizWxPasserMapper;
import com.ynjs.pojo.BizWxPasser;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;
/**
* 支付控制器
*/
@Slf4j
@RestController
@RequestMapping("/appapi")
public class PostedFile {
/**
* 1. 图像文件:JPEG、PNG、GIF、BMP、SVG等。
* 2. 文档文件:PDF、DOC、DOCX、XLS、XLSX、PPT、PPTX等。
* 3. 压缩文件:ZIP、RAR、7Z、TAR、GZ等。频文件:MP4、AVI、MOV、WMV、FLV等。
* * 5. 音频文件:MP3、WAV、AAC、FLAC等。
* * 6. 文本文件:TXT、CSV、XML、JSON等。
* 4. 视
*/
@Resource
private BizWxPasserMapper bizWxPasserMapper;
private static String getFileExtension(String fileName) {
int dotIndex = fileName.lastIndexOf(".");
if (dotIndex > 0 && dotIndex < fileName.length() - 1) {
return fileName.substring(dotIndex + 1).toLowerCase();
}
return "";
}
private static boolean isAllowedExtension(String fileExtension, String allowedExtensions) {
String[] allowedExtensionArray = allowedExtensions.split(",");
for (String allowedExtension : allowedExtensionArray) {
if (allowedExtension.trim().equalsIgnoreCase(fileExtension)) {
return true;
}
}
return false;
}
/**
* 接口名称:个人信息—修改图片
* 接口请求 :localhost:8801/api/appapi/UploadAvatar
* 请求方式 :post
* 添加token:是
*
* @return
*/
@PostMapping("/UploadAvatar")
public Result uploadAvatar(@ApiParam("文件二进制数据") @RequestPart("file") MultipartFile file) {
log.error("上传文件 = " + file);
if (Objects.isNull(file)) {
return Result.error("找不到文件!");
}
if (file.getSize() == 0) {
return Result.error("未选择上传文件");
}
String fileName = file.getOriginalFilename(); // 获取文件名
String fileExtension = null; // 获取文件扩展名
if (fileName != null) {
fileExtension = getFileExtension(fileName);
}
String allowedExtensions = "jpg,jpeg,png,gif"; // 允许的文件扩展名
boolean isValidExtension = isAllowedExtension(fileExtension, allowedExtensions);
if (isValidExtension) {
// 处理文件上传逻辑
// 服务器的图片存储地址
File baseDir = new File("C:\\DLY_img\\\\");//存储地址
String now = new SimpleDateFormat("yyyy-MM").format(new Date());
String text_dir = baseDir + "\\" + now;
// 判断文件夹是否存在
if (!Files.exists(Paths.get(text_dir))) {
// Files.createDirectories(Paths.get(text_dir));
// 创建文件夹
File folder = new File(Paths.get(text_dir).toString());
if (!folder.exists()) {
folder.mkdir();
log.debug("目录创建成功");
}
}
String time_str = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
String file_path = "\\" + now + "\\" + time_str + "_" + fileName;
String file_ = now + "\\" + time_str + "_" + fileName; // 数据库保存的名字
String save_path = baseDir + file_path; // 服务器路径
// 创建文件
File saveFile = new File(save_path);
if (!saveFile.exists()) {
try {
saveFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
//获取当前用户 US_CODE
String token = Objects.requireNonNull(JwtTokenUtils.getCurrentUser()).getUS_CODE();
//创建BizWxPasser对象
BizWxPasser wx = new BizWxPasser();
//设置PASSER_CODE
wx.setPASSER_CODE(token);
//设置NICK_NAME
wx.setNICK_NAME(Objects.requireNonNull(JwtTokenUtils.getCurrentUser()).getUS_TEXT());
//判断bizWxPasserMapper.allByPASSER_CODE(token)是否为空
BizWxPasser bizWxPasser = bizWxPasserMapper.allByPASSER_CODE(token);
if (Objects.isNull(bizWxPasser)) {
//设置OPEN_ID
wx.setOPEN_ID("");
//设置WX_HEAD_URL
wx.setWX_HEAD_URL("");
//添加BizWxPasser
bizWxPasserMapper.addBizWxPasser(wx);
}
//设置WX_HEAD_URL
wx.setWX_HEAD_URL(file_);
//将文件保存到saveFile
//file.transferTo(saveFile);
try (FileOutputStream fos = new FileOutputStream(saveFile)) {
fos.write(file.getBytes());
} catch (IOException e) {
log.error("文件保存异常=" + e);
throw new CustomException("上传图片保存失败,请稍后再试~");
}
String del_path = baseDir + "\\" + bizWxPasser.getWX_HEAD_URL(); // 服务器路径
File delFile = new File(del_path);
boolean delete = delFile.delete();
if (!delete) {
log.error("删除文件异常=" + del_path);
}
//更新BizWxPasser
bizWxPasserMapper.upBizWxPasser(wx);
//设置url
String url = "http:\\/\\/head.img.ynjs.cc\\/";
//返回成功结果
return Result.success(url + file_);
} catch (Exception e) {
log.debug("上传异常 = " + e);
//返回上传失败结果
return Result.error("上传图片保存失败,请稍后再试~" + e);
}
} else {
//返回不允许上传该文件格式结果
return Result.error("不允许上传该文件格式");
}
}
}
解释代码
好吧,懒得解释反正挺简单,反复看几遍就明白了!
开玩笑
有些代码还是要解释一下的
- 这是用来获取文件的后缀名的
private static String getFileExtension(String fileName) {
int dotIndex = fileName.lastIndexOf(".");
if (dotIndex > 0 && dotIndex < fileName.length() - 1) {
return fileName.substring(dotIndex + 1).toLowerCase();
}
return "";
}
private static boolean isAllowedExtension(String fileExtension, String allowedExtensions) {
String[] allowedExtensionArray = allowedExtensions.split(",");
for (String allowedExtension : allowedExtensionArray) {
if (allowedExtension.trim().equalsIgnoreCase(fileExtension)) {
return true;
}
}
return false;
}
- MultipartFile 是spring boot的上传文件的类,这个注解是将文件转换成二进制
@RequestPart("file") MultipartFile file
- 在多看看(注释多有的)
@PostMapping("/UploadAvatar")
public Result uploadAvatar(@ApiParam("文件二进制数据") @RequestPart("file") MultipartFile file) {
log.error("上传文件 = " + file);
if (Objects.isNull(file)) {
return Result.error("找不到文件!");
}
if (file.getSize() == 0) {
return Result.error("未选择上传文件");
}
String fileName = file.getOriginalFilename(); // 获取文件名
String fileExtension = null; // 获取文件扩展名
if (fileName != null) {
fileExtension = getFileExtension(fileName);
}
String allowedExtensions = "jpg,jpeg,png,gif"; // 允许的文件扩展名
boolean isValidExtension = isAllowedExtension(fileExtension, allowedExtensions);
if (isValidExtension) {
// 处理文件上传逻辑
// 服务器的图片存储地址
File baseDir = new File("C:\\DLY_img\\\\");//存储地址
String now = new SimpleDateFormat("yyyy-MM").format(new Date());
String text_dir = baseDir + "\\" + now;
// 判断文件夹是否存在
if (!Files.exists(Paths.get(text_dir))) {
// Files.createDirectories(Paths.get(text_dir));
// 创建文件夹
File folder = new File(Paths.get(text_dir).toString());
if (!folder.exists()) {
folder.mkdir();
log.debug("目录创建成功");
}
}
String time_str = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
String file_path = "\\" + now + "\\" + time_str + "_" + fileName;
String file_ = now + "\\" + time_str + "_" + fileName; // 数据库保存的名字
String save_path = baseDir + file_path; // 服务器路径
// 创建文件
File saveFile = new File(save_path);
if (!saveFile.exists()) {
try {
saveFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
try (FileOutputStream fos = new FileOutputStream(saveFile)) {
fos.write(file.getBytes());
} catch (IOException e) {
log.error("文件保存异常=" + e);
throw new CustomException("上传图片保存失败,请稍后再试~");
}
String del_path = baseDir + "\\" + bizWxPasser.getWX_HEAD_URL(); // 服务器路径
File delFile = new File(del_path);
boolean delete = delFile.delete();
if (!delete) {
log.error("删除文件异常=" + del_path);
}
//更新到数据库
//返回成功结果
return Result.success("添加成功");
} catch (Exception e) {
log.debug("上传异常 = " + e);
//返回上传失败结果
return Result.error("上传图片保存失败,请稍后再试~" + e);
}
} else {
//返回不允许上传该文件格式结果
return Result.error("不允许上传该文件格式");
}
}
有什么问题可以一起交流,共同进步!!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/205597.html