基于javaweb+mysql的springboot智能相册管理系统图片相册(java+springboot+vue+mysql+redis)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Node.js≥10
开发工具
后端:eclipse/idea/myeclipse/sts等均可配置运行
前端:WebStorm/VSCode/HBuilderX等均可
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot智能相册管理系统图片相册(java+springboot+vue+mysql+redis)
前端启动命令:npm run serve
后端启动类:StartApplication
登录:
user1 123456
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private TokenUtil tokenUtil;
@Resource
RedisUtil redisUtil;
@Resource
private UserService userService; //用户服务
@Resource
private FileServeUtil fileServeUtil;
//默认头像
private String defaultAvatar = "/static/avatar/1default.jpg";
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
/**
* 用户注册
* @param userName
* @param passWord
* @param email
* @param codeNumber
* @return
*/
@RequestMapping("/add")
public JSONObject addUser(@RequestParam("username")String userName,@RequestParam("password")String passWord,String email,String codeNumber){
JSONObject jsonObject = new JSONObject();
if(userService.selectUserName(userName)!=null){
jsonObject.put("status","exist");
return jsonObject;
}
* 通过id删除记录
* @param userId
* @param Ids
*/
@Override
public void deleteRecordByIds(Integer userId, List<Integer> Ids) {
recordMapper.deleteRecordByIds(userId,Ids);
}
}
@RequestMapping("/visual")
@RestController
public class VisualDataController {
@Resource
VisualDataService visualDataService;
@Resource
TokenUtil tokenUtil;
@RequestMapping("/selectTypeSite")
public JSONObject selectTypeSite(String token) {
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
Integer userId;
if(user!=null) {
userId = user.getUserId();
}
else{
jsonObject.put("status","fail");
return jsonObject;
}
VisualDataVO visualDataVO = visualDataService.selectTypeSite(userId);
jsonObject.put("status","success");
userId = user.getUserId();
}
else{
jsonObject.put("status","fail");
return jsonObject;
}
recordService.deleteRecordByIds(userId,Ids);
jsonObject.put("status","success");
return jsonObject;
}
}
//记录
@RestController
@RequestMapping("/recycle")
public class RecycleController {
@Resource
RecycleService recycleService;
@Resource
RecordService recordService;
@Resource
TokenUtil tokenUtil;
//选择全部
@RequestMapping("/selectAll")
public JSONObject selectImage(String token){
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
Integer userId;
* @param userId
* @param albumId
* @param albumName
* @param count
* @return
* @throws Exception
*/
@Override
@Transactional(rollbackFor = Exception.class)
public JSONArray AIUploadImage(HttpServletRequest req,List<Image> imageList, Integer userId, Integer albumId, String albumName, int count) throws Exception {
//添加图片
imageMapper.addImages(imageList);
//返回图片id集合
JSONArray data = new JSONArray();
List<Integer> imageIds = new ArrayList<>();
int i=0;
for (Image image : imageList) {
imageIds.add(image.getImageId());
float fileSize = image.getImageSize();
String filePath = image.getCompressUrL();
List<AIResultVO> results = null;
List<AIResultVO> res = null;
results = fileServeUtil.imageGet(fileServeUtil.ServPathToAP(filePath));
//是返回结果最少
res = results.subList(0, Math.min(count, results.size() ));
JSONObject js = new JSONObject();
js.put("img","图片"+(i+1));
for(int j=0;j<res.size();j++){
String s = res.get(j).getValue()+res.get(j).getConfidence()+"%";
js.put("res"+(j+1),s);
}
data.add(js);
System.out.println(res);
imageMapper.addImageTypes(image.getImageId(),res);
i++;
}
//添加中间用户图片表
userMapper.addUserImage(userId,imageIds);
//添加相册图片中间表
if (albumId == 0) {
Album album = new Album();
album.setAlbumName(albumName);
* @param
* @param number
* @param userId
* @return
*/
boolean addRecord( HttpServletRequest req,String operation, Integer number, Integer userId);
/**
* 查询所有记录
* @param userId
* @return
*/
List<Record> selectAllRecord(Integer userId) throws ParseException;
/**
* 删除所有记录
* @param userId
*/
void deleteAllRecord(Integer userId);
/**
* 删除部分记录
* @param userId
* @param Ids
*/
void deleteRecordByIds(Integer userId,List<Integer> Ids);
}
@Service
public interface AlbumService {
void addAlbum(HttpServletRequest req,String albumName, Integer userId);
void setAlbumCover(Integer albumId,Integer imageId);
List<PartAlbumVO> selectAllAlbum(Integer userId);
void addImageToAlbum(HttpServletRequest req,Integer albumId,List<Integer> imageId,Integer userId);
private RecordService recordService;
@Resource
private TokenUtil tokenUtil;
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//上传照片
@RequestMapping("/upload")
public JSONObject upload(HttpServletRequest req, String albumName, Integer albumId, String imgSite, String imgType,String imgDate, String token, @RequestParam("file")MultipartFile[] multipartFiles) throws Exception {
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
Integer userId;
String userName;
if(user!=null) {
userId = user.getUserId();
userName = user.getUserName();
}
else{
jsonObject.put("status","fail");
return jsonObject;
}
Date imageDate ;
if(imgDate.equals("null")||imgDate.equals("")){
System.out.println(1);
imageDate=null;
}
else {
imageDate = dateFormat.parse(imgDate);
}
if(imgSite==null||imgSite.equals("")){
imgSite= "其它";
}
List<Image> imgList = new ArrayList<>();
//将所有上传的图片对象存入集合
for (MultipartFile m:multipartFiles){
String fileName = m.getOriginalFilename();
long fileSize = m.getSize();
String imageUrL = fileServeUtil.uploadServe("img", userName, m);
String compressUrL = fileServeUtil.CompressImage(fileServeUtil.ServPathToAP(imageUrL), userName, (float) m.getSize());
imgList.add(new Image(null,fileName,fileSize,imgSite,imageUrL,compressUrL,imageDate));
}
@Service
public class ImageServiceImpl implements ImageService {
@Resource
private ImageMapper imageMapper;
@Resource
private UserMapper userMapper;
@Resource
private AlbumMapper albumMapper;
@Resource
private RecycleMapper recycleMapper;
@Resource
private FileServeUtil fileServeUtil;
@Resource
private RecordService recordService;
// 当前系统时间
private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 普通上传
* @param imageList
* @param userId
* @param albumId
* @param albumName
* @param imgType
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)//事务控制
public boolean uploadImage(HttpServletRequest req,List<Image> imageList, Integer userId, Integer albumId, String albumName, String imgType) throws Exception {
//添加图片
imageMapper.addImages(imageList);
//返回图片id集合
List<Integer> imageIds = new ArrayList<>();
for (Image i : imageList) {
imageIds.add(i.getImageId());
}
//添加中间用户图片表
userMapper.addUserImage(userId,imageIds);
//添加图片类型中间表
return jsonObject;
}
String userName = userToken.getUserName();
//上传类型是头像,文件夹名采用用户名
String avatarPath = fileServeUtil.uploadServe("avatar", userName, multipartFile);
if(userToken!=null){
userToken.setAvatar(avatarPath);
}
System.out.println(userToken);
userService.updateUserAvatar(userToken);
jsonObject.put("status", "success");
return jsonObject;
}
}
@Service
public class AlbumServiceImpl implements AlbumService {
@Resource
AlbumMapper albumMapper;
@Resource
RecordService recordService;
@Resource
DateUtil dateUtil;
private String defaultAlbum = "/static/album/albumImg.png";
/**
* 添加相册
* @param albumName
@Resource
RecordService recordService;
@Resource
TokenUtil tokenUtil;
//选择相册名称
@RequestMapping("/selectAlbumName")
public JSONObject selectAlbumName(String token){
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
if(user==null){
jsonObject.put("status","fail");
return jsonObject;
}
List<PartAlbumVO> partAlbumVOS = albumService.selectAllAlbum(user.getUserId());
jsonObject.put("status","success");
jsonObject.put("data", partAlbumVOS);
return jsonObject;
}
//将图片添加相册
@RequestMapping("/addImageToAlbum")
public JSONObject addImageToAlbum(HttpServletRequest req, String token, @RequestParam("imageId") List<Integer> imageId, Integer albumId ){
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
if(user==null){
jsonObject.put("status","fail");
return jsonObject;
}
albumService.addImageToAlbum(req,albumId,imageId,user.getUserId());
jsonObject.put("status","success");
return jsonObject;
}
//从相册中删除图像
@RequestMapping("/removeImageFromAlbum")
public JSONObject removeImageFromAlbum(HttpServletRequest req, String token, @RequestParam("imageId") List<Integer> imageId, Integer albumId ){
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
if(user==null){
jsonObject.put("status","fail");
return jsonObject;
}
albumService.removeImageToAlbum(req,albumId,imageId,user.getUserId());
jsonObject.put("status","success");
js.put("res"+(j+1),s);
}
data.add(js);
System.out.println(res);
imageMapper.addImageTypes(image.getImageId(),res);
i++;
}
//添加中间用户图片表
userMapper.addUserImage(userId,imageIds);
//添加相册图片中间表
if (albumId == 0) {
Album album = new Album();
album.setAlbumName(albumName);
album.setAlbumImg(imageList.get(0).getCompressUrL());
album.setUserId(userId);
albumMapper.addAlbum(album);
//添加记录
recordService.addRecord(req, Operation.createAlbum.getName()+"\""+albumName+"\"",1,userId);
albumMapper.addAlbumImage(album.getAlbumId(),imageIds);
recordService.addRecord(req, Operation.addImageToAlbum.getName()+"\""+albumName+"\"",imageIds.size(),userId);
}
else{
if(albumId > 0){
albumMapper.addAlbumImage(albumId,imageIds);
recordService.addRecord(req, Operation.addImageToAlbum.getName()+"\""+albumName+"\"",imageIds.size(),userId);
}
}
return data;
}
/**
* 查询指定用户所有图片数量
* @param userId
* @return
*/
@Override
public Integer selectImageTotal(Integer userId) {
Integer integer = imageMapper.selectImageTotalCount(userId);
return integer;
}
/**
* 分页查询指定用户所有图片
* @param userId
* @param currentPage
* @param pageSize
* @return
*/
@Override
public ImageVO selectAllImage(Integer userId, Integer currentPage, Integer pageSize) {
PageHelper.startPage(currentPage,pageSize);
List<Image> images = imageMapper.selectAllImage(userId);
Integer integer = imageMapper.selectImageCountByTime(userId,imageDate);
ImageVO imageVO = new ImageVO(images,pres,integer);
return imageVO;
}
/**
* 查询图片时间和类型
* @param userId
* @return
*/
@Override
public AllTimeTypeVO selectTimeType(Integer userId) {
List<Date> dates = imageMapper.selectAllImageTime(userId);
//将null时间删掉
for(int i=0;i<dates.size();i++){
if(dates.get(i)==null){
dates.remove(i);
}
}
List<String> strings = imageMapper.selectAllImageType(userId);
AllTimeTypeVO allTimeTypeVO = new AllTimeTypeVO(strings,dates);
return allTimeTypeVO;
}
/**
* 删除图片,加入回收站
* @param userId
* @param imageId
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteImage(Integer userId,List<Integer> imageId) {
imageMapper.deleteUserImage(userId,imageId);
recycleMapper.addImageToRecycle(userId,imageId);
albumMapper.deleteAlbumImageByImgId(imageId);
}
}
}
else{
time="其它时间";
}
albumImageVOS.add(new AlbumImageVO(time,img));
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("images",albumImageVOS);
jsonObject.put("previewImageUrL",previewList);
return jsonObject;
}
}
@RestController
@RequestMapping("/album")
public class AlbumController {
@Resource
AlbumService albumService;
@Resource
RecordService recordService;
@Resource
TokenUtil tokenUtil;
//选择相册名称
@RequestMapping("/selectAlbumName")
public JSONObject selectAlbumName(String token){
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
if(user==null){
jsonObject.put("status","fail");
jsonObject.put("status","fail");
return jsonObject;
}
recordService.addRecord(req, Operation.downloadImage.getName(),number,userId);
jsonObject.put("status","success");
return jsonObject;
}
//选择全部
@RequestMapping("/selectAll")
public JSONObject selectAllRecord(String token) throws ParseException {
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
Integer userId;
if(user!=null) {
userId = user.getUserId();
}
else{
jsonObject.put("status","fail");
return jsonObject;
}
List<Record> records = recordService.selectAllRecord(userId);
jsonObject.put("status","success");
jsonObject.put("data",records);
return jsonObject;
}
//删除全部
@RequestMapping("/deleteAll")
public JSONObject deleteAllRecord(String token){
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
Integer userId;
if(user!=null) {
userId = user.getUserId();
}
else{
jsonObject.put("status","fail");
return jsonObject;
}
recordService.deleteAllRecord(userId);
jsonObject.put("status","success");
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private TokenUtil tokenUtil;
@Resource
RedisUtil redisUtil;
@Resource
private UserService userService; //用户服务
@Resource
private FileServeUtil fileServeUtil;
//默认头像
private String defaultAvatar = "/static/avatar/1default.jpg";
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
/**
* 用户注册
* @param userName
* @param passWord
* @param email
* @param codeNumber
* @return
*/
@RequestMapping("/add")
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void addAlbum(HttpServletRequest req, String albumName, Integer userId) {
Album album = new Album();
album.setAlbumImg(defaultAlbum);
album.setUserId(userId);
album.setAlbumName(albumName);
System.out.println(album);
albumMapper.addAlbum(album);
recordService.addRecord(req, Operation.createAlbum.getName()+"\""+albumName+"\"", 1,userId);
}
@Override
public void setAlbumCover( Integer albumId, Integer imageId) {
albumMapper.uploadAlbum(albumId,imageId);
}
/**
* 查询相册
* @param userId
* @return
*/
@Override
public List<PartAlbumVO> selectAllAlbum(Integer userId) {
if(userId==null){
return null;
}
List<PartAlbumVO> partAlbumVO = albumMapper.selectAllAlbum(userId);
return partAlbumVO;
}
/**
* 将图片添加至相册
* @param albumId
* @param imageId
*/
@Override
public void addImageToAlbum(HttpServletRequest req,Integer albumId, List<Integer> imageId,Integer userId) {
albumMapper.addAlbumImage(albumId,imageId);
String albumName = albumMapper.selectAlbum(albumId);
recordService.addRecord(req, Operation.addImageToAlbum.getName()+"\""+albumName+"\"", imageId.size(),userId);
}
/**
*/
@Override
public ImageVO selectAllImage(Integer userId, Integer currentPage, Integer pageSize) {
PageHelper.startPage(currentPage,pageSize);
List<Image> images = imageMapper.selectAllImage(userId);
List<String> pres = new ArrayList<>();
for (Image i:images){
pres.add(i.getImageUrL());
}
Integer integer = imageMapper.selectImageTotalCount(userId);
ImageVO imageVO = new ImageVO(images,pres,integer);
return imageVO;
}
/**
* 分页按类型查询指定用户所有图片
* @param userId
* @param currentPage
* @param pageSize
* @param imageType
* @return
*/
@Override
public ImageVO selectAllImageByType(Integer userId, Integer currentPage, Integer pageSize,String imageType) {
PageHelper.startPage(currentPage,pageSize);
List<Image> images = imageMapper.selectAllImageByType(userId,imageType);
List<String> pres = new ArrayList<>();
for (Image i:images){
pres.add(i.getImageUrL());
}
Integer integer = imageMapper.selectImageCountByType(userId,imageType);
ImageVO imageVO = new ImageVO(images,pres,integer);
return imageVO;
}
/**
* 分页按时间查询指定用户所有图片
* @param userId
* @param currentPage
* @param pageSize
* @param imageDate
* @return
VisualDataVO visualDataVO = visualDataService.selectTypeSite(userId);
jsonObject.put("status","success");
jsonObject.put("data", visualDataVO);
return jsonObject;
}
@RequestMapping("/selectImageInfo")
public JSONObject selectUserInfo(String token) {
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
Integer userId;
if(user!=null) {
userId = user.getUserId();
}
else{
jsonObject.put("status","fail");
return jsonObject;
}
jsonObject.put("status","success");
JSONObject res = visualDataService.selectUserInfo(userId);
jsonObject.put("data", res);
return jsonObject;
}
}
@RestController
public class SendEmailController {
@Resource
RedisUtil redisUtil;
@Value("${spring.mail.code.time}")
private int validTime;
@Resource
private SendEmailUtil se;
@RequestMapping("/code")
public String sendCode(@RequestParam("email") String email) {
System.out.println(email);
int codeLen = 6;
//int num = (int) ((Math.random() * 9 + 1) * Math.pow(10, codeLen - 1));
//记录下载
@RequestMapping("/recordDownload")
public JSONObject recordDownload(HttpServletRequest req, String token,Integer number){
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
Integer userId;
if(user!=null) {
userId = user.getUserId();
}
else{
jsonObject.put("status","fail");
return jsonObject;
}
recordService.addRecord(req, Operation.downloadImage.getName(),number,userId);
jsonObject.put("status","success");
return jsonObject;
}
//选择全部
@RequestMapping("/selectAll")
public JSONObject selectAllRecord(String token) throws ParseException {
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
Integer userId;
if(user!=null) {
userId = user.getUserId();
}
else{
jsonObject.put("status","fail");
return jsonObject;
}
List<Record> records = recordService.selectAllRecord(userId);
jsonObject.put("status","success");
jsonObject.put("data",records);
return jsonObject;
}
//删除全部
@RequestMapping("/deleteAll")
public JSONObject deleteAllRecord(String token){
JSONObject jsonObject = new JSONObject();
User user = tokenUtil.jwtParser(token);
Integer userId;
if(user!=null) {
userId = user.getUserId();
}
else{
jsonObject.put("status","fail");
return jsonObject;