|
|
package com.jiudian.manage.controller;
|
|
|
|
|
|
import com.jiudian.manage.service.UserService;
|
|
|
import com.jiudian.manage.until.FileUtil;
|
|
|
import com.jiudian.manage.until.State;
|
|
|
import com.jiudian.manage.until.StateSignal;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
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.FileOutputStream;
|
|
|
import java.util.Map;
|
|
|
import java.util.Random;
|
|
|
import java.util.UUID;
|
|
|
//该控制器的主要功能:
|
|
|
//处理用户头像上传请求,路径为/upFile/upFilePhoto.do
|
|
|
//核心流程:
|
|
|
//生成唯一文件名(避免重复)
|
|
|
//定义文件存储路径(本地路径 + 数据库存储的相对路径)
|
|
|
//调用工具类上传文件到本地服务器
|
|
|
//调用用户服务更新数据库中的用户头像路径
|
|
|
//根据上传和数据库更新的结果,返回成功 / 失败的响应状态
|
|
|
// 标记为REST风格控制器,所有方法返回数据而非视图
|
|
|
@RestController
|
|
|
// 配置请求路径前缀,所有方法的请求路径都以"/upFile"开头
|
|
|
@RequestMapping(value = "/upFile")
|
|
|
public class FileController {
|
|
|
|
|
|
// 自动注入用户服务类,用于处理用户相关业务(此处主要用于更新用户头像路径)
|
|
|
@Autowired
|
|
|
UserService userService;
|
|
|
|
|
|
// 配置具体请求路径,处理用户头像上传请求
|
|
|
@RequestMapping("/upFilePhoto.do")
|
|
|
// @RequestParam指定请求参数:file为上传的文件,userid为用户ID
|
|
|
public Map upFilePhoto(@RequestParam MultipartFile file, @RequestParam int userid) {
|
|
|
// 生成唯一文件名:UUID避免文件名重复 + 原始文件扩展名(保留文件类型)
|
|
|
String fileName = UUID.randomUUID().toString() + file.getOriginalFilename();
|
|
|
|
|
|
// 本地文件存储路径(项目内的静态资源目录)
|
|
|
String filePath = ".\\src\\main\\resources\\static\\File\\";
|
|
|
// 数据库存储的相对路径(用于前端访问时拼接完整路径)
|
|
|
String RealfilePath = "File\\" + fileName;
|
|
|
|
|
|
// 调用用户服务,更新该用户的头像路径到数据库
|
|
|
boolean photo = userService.photo(userid, RealfilePath);
|
|
|
|
|
|
// 标记文件上传是否成功
|
|
|
boolean uploadSuccess = false;
|
|
|
try {
|
|
|
// 调用文件工具类,将文件字节数据上传到指定路径
|
|
|
uploadSuccess = FileUtil.uploadFile(file.getBytes(), filePath, fileName);
|
|
|
} catch (Exception e) {
|
|
|
// 捕获上传过程中的异常并打印堆栈信息
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
|
|
|
// 创建状态信号对象,用于封装响应结果
|
|
|
StateSignal signal = new StateSignal();
|
|
|
|
|
|
// 判断文件上传和数据库更新是否都成功
|
|
|
if (uploadSuccess && photo) {
|
|
|
// 都成功则返回成功状态码和消息
|
|
|
signal.put(State.SuccessCode);
|
|
|
signal.put(State.SuccessMessage);
|
|
|
} else {
|
|
|
// 有一项失败则返回错误状态码和消息
|
|
|
signal.put(State.ErrorCode);
|
|
|
signal.put(State.ErrorMessage);
|
|
|
}
|
|
|
|
|
|
// 返回封装好的响应结果(Map格式)
|
|
|
return signal.getResult();
|
|
|
}
|
|
|
} |