Oss对象存储,以及品牌增删改查

master
20300 2024-03-07 15:33:45 +08:00
parent 6207ce4ba6
commit 3992579c5d
9 changed files with 350 additions and 1 deletions

View File

@ -82,7 +82,12 @@
<groupId>com.muyu</groupId> <groupId>com.muyu</groupId>
<artifactId>muyu-common-swagger</artifactId> <artifactId>muyu-common-swagger</artifactId>
</dependency> </dependency>
<!-- oss sdk-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -0,0 +1,62 @@
package com.muyu.product.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.StringUtils;
import com.muyu.product.domain.BrandInfo;
import com.muyu.product.service.BrandInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @ClassName BrandInfoController
* @Description
* @Author ZHIHAO.DAI
* @Date 2024/3/6 21:15
*/
@RestController
@RequestMapping("/brandInfo")
public class BrandInfoController {
@Autowired
private BrandInfoService brandInfoService;
//新增品牌
@PostMapping("/insertBrand")
public Result insertBrand(@RequestBody BrandInfo brandInfo){
if (brandInfo.getId()!=null && !"".equals(brandInfo.getId())){
BrandInfo updateBrandInfo = BrandInfo.updateBuildBrandInfo(brandInfo);
boolean update = brandInfoService.updateById(updateBrandInfo);
if (update){
return Result.success("","修改成功!");
}
return Result.error("修改失败");
}
BrandInfo insertBrandInfo = BrandInfo.buildBrandInfo(brandInfo);
boolean save = brandInfoService.save(insertBrandInfo);
if (save){
return Result.success(null,"添加成功");
}
return Result.error("添加失败");
}
@GetMapping("/getBrandList")
public Result<List<BrandInfo>> getBrandList(@RequestParam("likeName") String likeName){
LambdaQueryWrapper<BrandInfo> wrapper = new LambdaQueryWrapper<>();
if (StringUtils.isNotEmpty(likeName)){
wrapper.like(BrandInfo::getName,likeName);
}
List<BrandInfo> list = brandInfoService.list(wrapper);
return Result.success(list);
}
@GetMapping("deleteBrandInfo")
public Result deleteBrandInfo(Integer brandId){
boolean b = brandInfoService.removeById(brandId);
if (b){
return Result.success("","删除成功!");
}
return Result.error("删除失败");
}
}

View File

@ -0,0 +1,158 @@
package com.muyu.product.controller;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import com.muyu.common.core.domain.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import java.util.Random;
/**
* @ClassName UploadPicController
* @Description
* @Author ZHIHAO.DAI
* @Date 2024/3/6 21:16
*/
@RestController
@RequestMapping("/upload")
@CrossOrigin
public class UploadPicController {
@Value("${aliyun.endpoint}")
private String endpoint;
//阿里云OSS账号
@Value("${aliyun.accessKeyId}")
private String accessKeyId;
//阿里云OSS密钥
@Value("${aliyun.accessKeySecret}")
private String accessKeySecret;
//阿里云OSS上的存储块bucket名字
@Value("${aliyun.bucketName}")
private String bucketName;
//阿里云图片文件存储目录
@Value("${aliyun.filedir}")
private String filedir;
@PostMapping("/uploadPic")
public Result uploadImg(@RequestParam("file")MultipartFile file){
if (file.getSize()>1024*1024*20){
return Result.error("图片太大");
}
//获取图片后缀 :.jpg .png等
String originalFilename = file.getOriginalFilename();
String substring = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
//设定图片前缀
Random random = new Random();
String name = random.nextInt(10000) + substring;
//尝试将文件化作流
try {
InputStream inputStream = file.getInputStream();
//调用方法,将文件流和名字传过去
String s = this.realUploadFile(inputStream, name);
System.out.println("他的返回值是:"+s);
String imgUrl = getImgUrl(name);
return Result.success(imgUrl);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public String realUploadFile(InputStream inputStream, String fileName){
String ret = "";
try {
//该对象表示元数据信息
ObjectMetadata objectMetadata = new ObjectMetadata();
//将文件正确的长度传递给Oss,以便使用正确的字节流处理
objectMetadata.setContentLength(inputStream.available());
objectMetadata.setCacheControl("no-cache");
objectMetadata.setHeader("pragma", "no-cache");
objectMetadata.setContentType(getContentType(fileName.substring(fileName.lastIndexOf("."))));
objectMetadata.setContentDisposition("inline;filename=" +fileName);
//开始上传
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
PutObjectResult putObjectResult = ossClient.putObject(bucketName, filedir + fileName, inputStream, objectMetadata);
ret = putObjectResult.getETag();
} catch (IOException e) {
throw new RuntimeException(e);
}finally {
try {
if (inputStream !=null){
inputStream.close();
}
}catch (IOException e) {
throw new RuntimeException(e);
}
}
System.out.println("ret:"+ret);
return ret;
}
public static String getContentType(String FilenameExtension) {
if (FilenameExtension.equalsIgnoreCase(".bmp")) {
return "image/bmp";
}
if (FilenameExtension.equalsIgnoreCase(".gif")) {
return "image/gif";
}
if (FilenameExtension.equalsIgnoreCase(".jpeg") ||
FilenameExtension.equalsIgnoreCase(".jpg") ||
FilenameExtension.equalsIgnoreCase(".png")) {
return "image/jpg";
}
if (FilenameExtension.equalsIgnoreCase(".html")) {
return "text/html";
}
if (FilenameExtension.equalsIgnoreCase(".txt")) {
return "text/plain";
}
if (FilenameExtension.equalsIgnoreCase(".vsd")) {
return "application/vnd.visio";
}
if (FilenameExtension.equalsIgnoreCase(".pptx") ||
FilenameExtension.equalsIgnoreCase(".ppt")) {
return "application/vnd.ms-powerpoint";
}
if (FilenameExtension.equalsIgnoreCase(".docx") ||
FilenameExtension.equalsIgnoreCase(".doc")) {
return "application/msword";
}
if (FilenameExtension.equalsIgnoreCase(".xml")) {
return "text/xml";
}
return "image/jpg";
}
public String getImgUrl(String fileUrl) {
System.out.println(fileUrl);
if (!StringUtils.isEmpty(fileUrl)) {
String[] split = fileUrl.split("/");
String url = this.getUrl(this.filedir + split[split.length - 1]);
String[] spilt1 = url.split("\\?");
return spilt1[0];
}
return null;
}
public String getUrl(String key) {
// 设置URL过期时间为10年 3600l* 1000*24*365*10
Date expiration = new Date(new Date().getTime() + 3600L * 1000 * 24 * 365 * 10);
// 生成URL
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
URL url = ossClient.generatePresignedUrl(bucketName, key, expiration);
System.out.println("生成的url是:"+url.toString());
if (url != null) {
return url.toString();
}
return null;
}
}

View File

@ -0,0 +1,66 @@
package com.muyu.product.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.muyu.common.core.annotation.Excel;
import com.muyu.common.core.web.domain.BaseEntity;
import com.muyu.common.security.utils.SecurityUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Date;
/**
* @ClassName BrandInfo
* @Description
* @Author ZHIHAO.DAI
* @Date 2024/3/6 21:08
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("brand_info")
public class BrandInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@Excel(name = "参数主键", cellType = Excel.ColumnType.NUMERIC)
@TableId( type = IdType.AUTO)
private Integer id;
@Excel(name = "品牌名称")
private String name;
@Excel(name = "品牌logo")
private String logo;
@Excel(name = "品牌介绍")
private String introduction;
public static BrandInfo buildBrandInfo(BrandInfo brandInfo){
return BrandInfo.builder()
.id(brandInfo.id)
.name(brandInfo.name)
.logo(brandInfo.logo)
.introduction(brandInfo.introduction)
.createBy(SecurityUtils.getUsername())
.createTime(new Date())
.remark("")
.build();
}
public static BrandInfo updateBuildBrandInfo(BrandInfo brandInfo){
return BrandInfo.builder()
.id(brandInfo.id)
.name(brandInfo.name)
.logo(brandInfo.logo)
.introduction(brandInfo.introduction)
.updateBy(SecurityUtils.getUsername())
.updateTime(new Date())
.remark("")
.build();
}
}

View File

@ -0,0 +1,13 @@
package com.muyu.product.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.product.domain.BrandInfo;
/**
* @ClassName BrandInfoMapper
* @Description
* @Author ZHIHAO.DAI
* @Date 2024/3/6 21:11
*/
public interface BrandInfoMapper extends BaseMapper<BrandInfo> {
}

View File

@ -0,0 +1,13 @@
package com.muyu.product.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.product.domain.BrandInfo;
/**
* @ClassName BrandInfoService
* @Description
* @Author ZHIHAO.DAI
* @Date 2024/3/6 21:13
*/
public interface BrandInfoService extends IService<BrandInfo> {
}

View File

@ -0,0 +1,18 @@
package com.muyu.product.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.product.domain.BrandInfo;
import com.muyu.product.mapper.BrandInfoMapper;
import com.muyu.product.service.BrandInfoService;
import org.springframework.stereotype.Service;
/**
* @ClassName BrandInfoServiceImpl
* @Description
* @Author ZHIHAO.DAI
* @Date 2024/3/6 21:13
*/
@Service
public class BrandInfoServiceImpl extends ServiceImpl<BrandInfoMapper, BrandInfo>
implements BrandInfoService {
}

View File

@ -23,6 +23,13 @@ spring:
# 共享配置 # 共享配置
shared-configs: shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
aliyun:
endpoint: oss-cn-shanghai.aliyuncs.com
accessKeyId: LTAI5t7tFq3epGTDBkLtdmdd
accessKeySecret: ZI1Wpe8VFRLbsUE6dmyzZAf0n47H8o
filedir: test/hyc/dzh
accessPre: http://oss.zywjjj.vip
bucketName: hycdzh
logging: logging:
level: level:
com.muyu.system.mapper: DEBUG com.muyu.system.mapper: DEBUG

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.muyu.product.mapper.BrandInfoMapper">
</mapper>