From 66460c199c6424e472f841614acdd70bf62c24d7 Mon Sep 17 00:00:00 2001 From: wanghb <17803890193@163.com> Date: Fri, 11 Aug 2023 11:16:18 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91oss=E5=92=8C?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 12 ++ .../zhiyun03/course/mapper/CourseMapper.java | 2 + .../zhiyun03/course/param/PageParam.java | 6 + .../service/impl/CourseServiceImpl.java | 12 +- .../controller/DownloadController.java | 96 ++++++++++++ .../zhiyun03/download/entity/Download.java | 6 +- .../download/mapper/DownloadMapper.java | 8 + .../download/service/DownloadService.java | 16 ++ .../service/impl/DownloadServiceImpl.java | 138 ++++++++++++++++++ .../zhiyun03/download/vo/DownloadVo.java | 34 +++++ .../zhiyun03/utils/oss/AliyunOssUtil.java | 76 ++++++++++ .../zhiyun03/utils/oss/OssConfiguration.java | 32 ++++ src/main/resources/application.yml | 19 ++- src/main/resources/mapper/CourseMapper.xml | 3 + src/main/resources/mapper/DownloadMapper.xml | 45 ++++++ 15 files changed, 492 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/zhiyun/zhiyun03/download/vo/DownloadVo.java create mode 100644 src/main/java/com/zhiyun/zhiyun03/utils/oss/AliyunOssUtil.java create mode 100644 src/main/java/com/zhiyun/zhiyun03/utils/oss/OssConfiguration.java create mode 100644 src/main/resources/mapper/DownloadMapper.xml diff --git a/pom.xml b/pom.xml index b2ced62..398067b 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,18 @@ 3.0.3 + + com.aliyun.oss + aliyun-sdk-oss + 3.14.0 + + + + commons-fileupload + commons-fileupload + 1.4 + + diff --git a/src/main/java/com/zhiyun/zhiyun03/course/mapper/CourseMapper.java b/src/main/java/com/zhiyun/zhiyun03/course/mapper/CourseMapper.java index 03358bc..cef02f2 100644 --- a/src/main/java/com/zhiyun/zhiyun03/course/mapper/CourseMapper.java +++ b/src/main/java/com/zhiyun/zhiyun03/course/mapper/CourseMapper.java @@ -17,4 +17,6 @@ public interface CourseMapper extends BaseMapper { CourseVo queryCourseById(Integer id); int updateCourseById(Course course); + + int selectByName(String courseName); } diff --git a/src/main/java/com/zhiyun/zhiyun03/course/param/PageParam.java b/src/main/java/com/zhiyun/zhiyun03/course/param/PageParam.java index 38c843a..c40fdc3 100644 --- a/src/main/java/com/zhiyun/zhiyun03/course/param/PageParam.java +++ b/src/main/java/com/zhiyun/zhiyun03/course/param/PageParam.java @@ -4,6 +4,12 @@ import lombok.Data; @Data public class PageParam { + /** + * 当前页 + */ private Integer currentPage; + /** + * 每页展示条数 + */ private Integer pageSize; } diff --git a/src/main/java/com/zhiyun/zhiyun03/course/service/impl/CourseServiceImpl.java b/src/main/java/com/zhiyun/zhiyun03/course/service/impl/CourseServiceImpl.java index d78e89f..fa75935 100644 --- a/src/main/java/com/zhiyun/zhiyun03/course/service/impl/CourseServiceImpl.java +++ b/src/main/java/com/zhiyun/zhiyun03/course/service/impl/CourseServiceImpl.java @@ -58,12 +58,18 @@ public class CourseServiceImpl extends ServiceImpl implemen */ @Override public int addCourse(CourseVo courseVo) { - if (courseVo == null) { throw new ServiceException("400","课程添加失败"); } + int sum = courseMapper.selectByName(courseVo.getCourseName()); + if (sum>0) + { + throw new ServiceException("403","该课程已经存在"); + } + + Course course = new Course(); BeanUtils.copyProperties(courseVo,course); @@ -97,12 +103,14 @@ public class CourseServiceImpl extends ServiceImpl implemen */ @Override public int updateById(CourseVo courseVo) { + //将vo值赋给course Course course = new Course(); BeanUtils.copyProperties(courseVo,course); + //查询归属目录 String dirName = courseVo.getDirName(); Integer id = directoryMapper.selectByName(dirName); course.setDirId(id); - + //根据id进行课程更新 int count = courseMapper.updateCourseById(course); if (count<0) { diff --git a/src/main/java/com/zhiyun/zhiyun03/download/controller/DownloadController.java b/src/main/java/com/zhiyun/zhiyun03/download/controller/DownloadController.java index 7f946bf..74529e7 100644 --- a/src/main/java/com/zhiyun/zhiyun03/download/controller/DownloadController.java +++ b/src/main/java/com/zhiyun/zhiyun03/download/controller/DownloadController.java @@ -1,4 +1,100 @@ package com.zhiyun.zhiyun03.download.controller; +import com.zhiyun.zhiyun03.course.vo.PageVO; +import com.zhiyun.zhiyun03.download.service.DownloadService; +import com.zhiyun.zhiyun03.download.vo.DownloadVo; +import com.zhiyun.zhiyun03.utils.common.JsonResult; +import com.zhiyun.zhiyun03.utils.oss.AliyunOssUtil; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.File; +import java.io.FileOutputStream; + +@RestController +@RequestMapping("/download") public class DownloadController { + + @Resource + private AliyunOssUtil ossUtil; + + + @Resource + private DownloadService downloadService; + + + @ApiOperation("查询下载中心") + @GetMapping("/queryDownload") + public JsonResult> queryDownload(@ApiParam @RequestParam(value = "page",required = false,defaultValue = "1")Integer page, + @ApiParam @RequestParam(value = "limit",required = false,defaultValue = "5")Integer limit ){ + + PageVO lists = downloadService.queryDownload(page,limit); + + return JsonResult.success(lists); + } + + @ApiOperation("添加下载") + @PostMapping("/addDownload") + public JsonResult addDownload(DownloadVo vo){ + int count = downloadService.addDownload(vo); + return JsonResult.success(); + + } + + @ApiOperation("图片上传") + @PostMapping("/uploadFile") + public JsonResult upload(@RequestParam("file") @RequestPart MultipartFile file){ + String upload = null; + try { + if (file != null) { + String fileName = file.getOriginalFilename(); + if (!"".equals(fileName.trim())) { + File newFile = new File(fileName); + + FileOutputStream os = new FileOutputStream(newFile); + os.write(file.getBytes()); + os.close(); + + //把file里的内容复制到newFile中 + file.transferTo(newFile); + upload = ossUtil.upload(newFile); + + } + } + } catch (Exception e) { + e.printStackTrace(); + } + String path = "https://zhiyun03.oss-cn-beijing.aliyuncs.com/"+ upload; + return JsonResult.success(path); + } + + + + + @ApiOperation("删除下载") + @PostMapping("/delDownload") + public JsonResult delDownload(Integer id){ + int count = downloadService.delDownload(id); + return JsonResult.success(); + + } + + @ApiOperation("根据Id查询") + @PostMapping("/queryById") + public JsonResult queryById(Integer id){ + DownloadVo downloadAddVo =downloadService.queryById(id); + return JsonResult.success(downloadAddVo); + + } + + @ApiOperation("更新下载") + @PostMapping("/updateDownload") + public JsonResult updateDownload(DownloadVo vo){ + int count =downloadService.updateDownload(vo); + return JsonResult.success(); + } + } diff --git a/src/main/java/com/zhiyun/zhiyun03/download/entity/Download.java b/src/main/java/com/zhiyun/zhiyun03/download/entity/Download.java index b599b5b..df7a662 100644 --- a/src/main/java/com/zhiyun/zhiyun03/download/entity/Download.java +++ b/src/main/java/com/zhiyun/zhiyun03/download/entity/Download.java @@ -21,7 +21,7 @@ public class Download { * id */ @TableId(value = "id",type = IdType.AUTO) - private int id; + private Integer id; /** * 下载名称 @@ -32,8 +32,8 @@ public class Download { /** * 下载简介 */ - @TableField(value = "download_biref") - private String downloadBiref; + @TableField(value = "download_brief") + private String downloadBrief; /** * 下载链接 diff --git a/src/main/java/com/zhiyun/zhiyun03/download/mapper/DownloadMapper.java b/src/main/java/com/zhiyun/zhiyun03/download/mapper/DownloadMapper.java index ab3f516..25f2c1f 100644 --- a/src/main/java/com/zhiyun/zhiyun03/download/mapper/DownloadMapper.java +++ b/src/main/java/com/zhiyun/zhiyun03/download/mapper/DownloadMapper.java @@ -2,8 +2,16 @@ package com.zhiyun.zhiyun03.download.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zhiyun.zhiyun03.download.entity.Download; +import com.zhiyun.zhiyun03.download.vo.DownloadVo; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + @Mapper public interface DownloadMapper extends BaseMapper { + List queryDownload(); + + int selectByName(String downloadName); + + int updateDownloadById(Download download); } diff --git a/src/main/java/com/zhiyun/zhiyun03/download/service/DownloadService.java b/src/main/java/com/zhiyun/zhiyun03/download/service/DownloadService.java index 73872c5..18cba85 100644 --- a/src/main/java/com/zhiyun/zhiyun03/download/service/DownloadService.java +++ b/src/main/java/com/zhiyun/zhiyun03/download/service/DownloadService.java @@ -1,7 +1,23 @@ package com.zhiyun.zhiyun03.download.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.zhiyun.zhiyun03.course.vo.PageVO; import com.zhiyun.zhiyun03.download.entity.Download; +import com.zhiyun.zhiyun03.download.vo.DownloadVo; public interface DownloadService extends IService { + /* + * 查询下载中心 + * */ + PageVO queryDownload(Integer page, Integer limit); + /* + * 添加下载 + * */ + int addDownload(DownloadVo vo); + + int delDownload(Integer id); + + DownloadVo queryById(Integer id); + + int updateDownload(DownloadVo vo); } diff --git a/src/main/java/com/zhiyun/zhiyun03/download/service/impl/DownloadServiceImpl.java b/src/main/java/com/zhiyun/zhiyun03/download/service/impl/DownloadServiceImpl.java index 924a89a..c90e1e0 100644 --- a/src/main/java/com/zhiyun/zhiyun03/download/service/impl/DownloadServiceImpl.java +++ b/src/main/java/com/zhiyun/zhiyun03/download/service/impl/DownloadServiceImpl.java @@ -1,11 +1,149 @@ package com.zhiyun.zhiyun03.download.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.zhiyun.zhiyun03.application.entity.Directory; +import com.zhiyun.zhiyun03.application.mapper.DirectoryMapper; +import com.zhiyun.zhiyun03.course.vo.PageVO; import com.zhiyun.zhiyun03.download.entity.Download; import com.zhiyun.zhiyun03.download.mapper.DownloadMapper; import com.zhiyun.zhiyun03.download.service.DownloadService; +import com.zhiyun.zhiyun03.download.vo.DownloadVo; +import com.zhiyun.zhiyun03.utils.exception.ServiceException; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + @Service public class DownloadServiceImpl extends ServiceImpl implements DownloadService { + + @Resource + private DownloadMapper downloadMapper; + + @Resource + private DirectoryMapper directoryMapper; + + /* + * 查询下载中心 + * */ + @Override + public PageVO queryDownload(Integer page, Integer limit) { + + //开启分页 + PageHelper.startPage(page,limit); + //查询所有下载数据 + List downloadVoList = downloadMapper.queryDownload(); + + PageInfo downloadVoPageInfo = new PageInfo<>(downloadVoList); + PageVO downloadVoPageVO = new PageVO<>(); + //获取当前页 + downloadVoPageVO.setCurrentPage(downloadVoPageInfo.getPageNum()); + //总条数 + downloadVoPageVO.setTotal(downloadVoPageInfo.getTotal()); + //分页数据 + downloadVoPageVO.setList(downloadVoPageInfo.getList()); + + + return downloadVoPageVO; + } + /* + * 添加下载 + * */ + @Override + public int addDownload(DownloadVo vo) { + //查询下载名称是否已经存在 + int count = downloadMapper.selectByName(vo.getDownloadName()); + if (count>0) + { + throw new ServiceException("403","下载已存在"); + } + //将vo值传给download + Download download = new Download(); + BeanUtils.copyProperties(vo,download); + //查询归属目录id + Integer dirId = directoryMapper.selectByName(vo.getDirName()); + download.setDirId(dirId); + download.setDownloadUpdatetime(new Date()); + //添加download + int insert = downloadMapper.insert(download); + if (insert>0) + { + return insert; + }else + { + throw new ServiceException("400","添加下载失败"); + } + } + + /* + * 根据id删除数据 + * */ + @Override + public int delDownload(Integer id) { + if (id == null) + { + throw new ServiceException("400","查询id值为空"); + } + //根据id删除 + int count = downloadMapper.deleteById(id); + + if (count>0) + { + return count; + }else + { + throw new ServiceException("400","删除失败"); + } + } + /* + * 根据id查询数据 + * */ + @Override + public DownloadVo queryById(Integer id) { + //根据id查询数据 + Download download = downloadMapper.selectById(id); + //查询目录id + Directory directory = directoryMapper.selectById(download.getDirId()); + DownloadVo downloadAddVo = new DownloadVo(); + //复制给vo + BeanUtils.copyProperties(download,downloadAddVo); + downloadAddVo.setDirName(directory.getDirName()); + + return downloadAddVo; + } + /* + * 更新下载 + * */ + @Override + public int updateDownload(DownloadVo vo) { + //查询更新的下载名是否存在 + int sum = downloadMapper.selectByName(vo.getDownloadName()); + if (sum>0) + { + throw new ServiceException("403","下载已存在"); + } + + //将vo值传给download + Download download = new Download(); + BeanUtils.copyProperties(vo,download); + //查询归属目录id + Integer dirId = directoryMapper.selectByName(vo.getDirName()); + download.setDirId(dirId); + download.setDownloadUpdatetime(new Date()); + //添加download + int insert = downloadMapper.updateDownloadById(download); + if (insert>0) + { + return insert; + }else + { + throw new ServiceException("400","更新失败"); + } + } + + } diff --git a/src/main/java/com/zhiyun/zhiyun03/download/vo/DownloadVo.java b/src/main/java/com/zhiyun/zhiyun03/download/vo/DownloadVo.java new file mode 100644 index 0000000..7f558e3 --- /dev/null +++ b/src/main/java/com/zhiyun/zhiyun03/download/vo/DownloadVo.java @@ -0,0 +1,34 @@ +package com.zhiyun.zhiyun03.download.vo; + +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +@Data +public class DownloadVo { + @TableId + private int id; + + /** + * 下载名称 + */ + private String downloadName; + /** + * 下载简介 + */ + private String downloadBrief; + /** + * 下载链接 + */ + private String downloadUrl; + /** + * 归属目录 + */ + private String dirName; + /** + * 下载图片 + */ + private String downloadImg; + + + +} diff --git a/src/main/java/com/zhiyun/zhiyun03/utils/oss/AliyunOssUtil.java b/src/main/java/com/zhiyun/zhiyun03/utils/oss/AliyunOssUtil.java new file mode 100644 index 0000000..2e7ac00 --- /dev/null +++ b/src/main/java/com/zhiyun/zhiyun03/utils/oss/AliyunOssUtil.java @@ -0,0 +1,76 @@ +package com.zhiyun.zhiyun03.utils.oss; + +import com.aliyun.oss.OSSClient; +import com.aliyun.oss.model.CannedAccessControlList; +import com.aliyun.oss.model.CreateBucketRequest; +import com.aliyun.oss.model.PutObjectRequest; +import com.aliyun.oss.model.PutObjectResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.UUID; + +/** + * 封装文件上传方法 + */ +@Component +public class AliyunOssUtil { + + @Autowired + private OssConfiguration config; + + public String upload(File file) { + if (file == null) { + return null; + } + + String endPoint = config.getEndPoint(); + String keyId = config.getAccessKeyId(); + String keySecret = config.getAccessKeySecret(); + String bucketName = config.getBucketName(); + String fileHost = config.getFileHost(); + + //定义子文件的格式 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + String dateStr = format.format(new Date()); + + //阿里云文件上传客户端 + OSSClient client = new OSSClient(endPoint, keyId, keySecret); + + try { + //判断桶是否存在 + if (!client.doesBucketExist(bucketName)) { + //创建桶 + client.createBucket(bucketName); + CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName); + //设置访问权限为公共读 + createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead); + //发起创建桶的请求 + client.createBucket(createBucketRequest); + } + + //当桶存在时,进行文件上传 + //设置文件路径和名称 + String fileUrl = fileHost + "/" + (dateStr + "/" + UUID.randomUUID().toString().replace("-", "") + "-" + file.getName()); + PutObjectResult result = client.putObject(new PutObjectRequest(bucketName, fileUrl, file)); + client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); + + //文件上传成功后,返回当前文件的路径 + if (result != null) { + return fileUrl; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (client != null) { + client.shutdown(); + } + } + + return null; + } + +} \ No newline at end of file diff --git a/src/main/java/com/zhiyun/zhiyun03/utils/oss/OssConfiguration.java b/src/main/java/com/zhiyun/zhiyun03/utils/oss/OssConfiguration.java new file mode 100644 index 0000000..8df33d5 --- /dev/null +++ b/src/main/java/com/zhiyun/zhiyun03/utils/oss/OssConfiguration.java @@ -0,0 +1,32 @@ +package com.zhiyun.zhiyun03.utils.oss; + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +/** + * 把配置文件中的配置信息读取到该类中. + */ +@Data +@Configuration +public class OssConfiguration { + + @Value("${endpoint}") + private String endPoint; + + @Value("${accessKeyId}") + private String accessKeyId; + + @Value("${accessKeySecret}") + private String accessKeySecret; + + @Value("${filehost}") + private String fileHost; + + @Value("${bucketName}") + private String bucketName; + +} \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 2a02a29..9225c66 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,14 +1,17 @@ server: port: 8080 -# -#mybatis: -# mapper-locations: classpath*:mapper/**/*.xml -# configuration: -# map-underscore-to-camel-case: true -# # ??????? -# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl -# + +#配置OSS的个人信息 +bucketName: zhiyun03 +accessKeyId: LTAI5t8zUbXsJpzPuoBQ3eGu +accessKeySecret: dIYCoLCKlKPp17wqRRPlrwLaznDYXc +#OSS对应的区域 +endpoint: oss-cn-beijing.aliyuncs.com +#OSS对应的文件夹,会在OSS中自动创建 +filehost: images + + spring: datasource: type: com.alibaba.druid.pool.DruidDataSource diff --git a/src/main/resources/mapper/CourseMapper.xml b/src/main/resources/mapper/CourseMapper.xml index f2909f8..84e176c 100644 --- a/src/main/resources/mapper/CourseMapper.xml +++ b/src/main/resources/mapper/CourseMapper.xml @@ -47,5 +47,8 @@ on c.dir_id = d.id where c.id =#{id} + \ No newline at end of file diff --git a/src/main/resources/mapper/DownloadMapper.xml b/src/main/resources/mapper/DownloadMapper.xml new file mode 100644 index 0000000..9d8e553 --- /dev/null +++ b/src/main/resources/mapper/DownloadMapper.xml @@ -0,0 +1,45 @@ + + + + + update download + + + download_name=#{downloadName}, + + + download_url=#{downloadUrl}, + + + download_brief=#{downloadBrief}, + + + dir_id=#{dirId}, + + + download_img=#{downloadImg} + + + + + id = #{id} + + + + + + + + + + \ No newline at end of file