feat: 上传文件
This commit is contained in:
parent
29f303b64d
commit
b670ee61c1
|
@ -12,5 +12,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|||
@FeignClient(value = "service-driver")
|
||||
public interface CosFeignClient {
|
||||
|
||||
|
||||
// 上传文件
|
||||
@PostMapping(value = "cos/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||
Result<CosUploadVo> upload(@RequestPart("file") MultipartFile file, @RequestParam(name = "path", defaultValue = "auth") String path);
|
||||
}
|
|
@ -18,6 +18,16 @@
|
|||
<groupId>com.github.binarywang</groupId>
|
||||
<artifactId>weixin-java-miniapp</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.qcloud</groupId>
|
||||
<artifactId>cos_api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.tencentcloudapi</groupId>
|
||||
<artifactId>tencentcloud-sdk-java</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package com.atguigu.daijia.driver.config;
|
||||
|
||||
import com.qcloud.cos.COSClient;
|
||||
import com.qcloud.cos.ClientConfig;
|
||||
import com.qcloud.cos.auth.BasicCOSCredentials;
|
||||
import com.qcloud.cos.auth.COSCredentials;
|
||||
import com.qcloud.cos.http.HttpProtocol;
|
||||
import com.qcloud.cos.region.Region;
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Data
|
||||
@Component
|
||||
@ConfigurationProperties(prefix = "tencent.cloud")
|
||||
public class TencentCloudProperties {
|
||||
private String secretId;
|
||||
private String secretKey;
|
||||
private String region;
|
||||
private String bucketPrivate;
|
||||
|
||||
private String persionGroupId;
|
||||
|
||||
@Bean
|
||||
public COSClient getCosClient() {
|
||||
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
|
||||
// 2 设置 bucket 的地域, COS 地域
|
||||
Region region = new Region(this.region);
|
||||
ClientConfig clientConfig = new ClientConfig(region);
|
||||
// 这里建议设置使用 https 协议
|
||||
clientConfig.setHttpProtocol(HttpProtocol.https);
|
||||
// 3 生成 cos 客户端。
|
||||
return new COSClient(cred, clientConfig);
|
||||
}
|
||||
}
|
|
@ -1,9 +1,14 @@
|
|||
package com.atguigu.daijia.driver.controller;
|
||||
|
||||
import com.atguigu.daijia.common.result.Result;
|
||||
import com.atguigu.daijia.driver.service.CosService;
|
||||
import com.atguigu.daijia.model.vo.driver.CosUploadVo;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@Slf4j
|
||||
@Tag(name = "腾讯云cos上传接口管理")
|
||||
|
@ -11,6 +16,16 @@ import org.springframework.web.bind.annotation.RestController;
|
|||
@RequestMapping(value = "/cos")
|
||||
public class CosController {
|
||||
|
||||
@Autowired
|
||||
private CosService cosService;
|
||||
|
||||
@Operation(summary = "上传")
|
||||
@PostMapping("/upload")
|
||||
//@GuiguLogin
|
||||
public Result<CosUploadVo> upload(@RequestPart("file") MultipartFile file,
|
||||
@RequestParam("path") String path) {
|
||||
CosUploadVo cosUploadVo = cosService.upload(file, path);
|
||||
return Result.ok(cosUploadVo);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
package com.atguigu.daijia.driver.service;
|
||||
|
||||
import com.atguigu.daijia.model.vo.driver.CosUploadVo;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
public interface CosService {
|
||||
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
*
|
||||
* @param file 文件
|
||||
* @param path path
|
||||
* @return CosUploadVo
|
||||
*/
|
||||
CosUploadVo upload(MultipartFile file, String path);
|
||||
}
|
||||
|
|
|
@ -1,13 +1,99 @@
|
|||
package com.atguigu.daijia.driver.service.impl;
|
||||
|
||||
import com.atguigu.daijia.driver.config.TencentCloudProperties;
|
||||
import com.atguigu.daijia.driver.service.CiService;
|
||||
import com.atguigu.daijia.driver.service.CosService;
|
||||
import com.atguigu.daijia.model.vo.driver.CosUploadVo;
|
||||
import com.qcloud.cos.COSClient;
|
||||
import com.qcloud.cos.http.HttpMethodName;
|
||||
import com.qcloud.cos.model.GeneratePresignedUrlRequest;
|
||||
import com.qcloud.cos.model.ObjectMetadata;
|
||||
import com.qcloud.cos.model.PutObjectRequest;
|
||||
import com.qcloud.cos.model.StorageClass;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.joda.time.DateTime;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
public class CosServiceImpl implements CosService {
|
||||
|
||||
@Autowired
|
||||
private TencentCloudProperties tencentCloudProperties;
|
||||
|
||||
@Autowired
|
||||
private COSClient cosClient;
|
||||
|
||||
@Autowired
|
||||
private CiService ciService;
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
*
|
||||
* @param file 文件
|
||||
* @param path path
|
||||
* @return CosUploadVo
|
||||
*/
|
||||
@Override
|
||||
public CosUploadVo upload(MultipartFile file, String path) {
|
||||
// 元数据信息
|
||||
ObjectMetadata meta = new ObjectMetadata();
|
||||
meta.setContentLength(file.getSize());
|
||||
meta.setContentEncoding("UTF-8");
|
||||
meta.setContentType(file.getContentType());
|
||||
|
||||
// 向存储桶中保存文件
|
||||
String fileType = Objects.requireNonNull(file.getOriginalFilename()).substring(file.getOriginalFilename().lastIndexOf(".")); // 文件后缀名
|
||||
String uploadPath = "/driver/" + path + "/" + UUID.randomUUID().toString().replaceAll("-", "") + fileType;
|
||||
PutObjectRequest putObjectRequest;
|
||||
try {
|
||||
putObjectRequest = new PutObjectRequest(tencentCloudProperties.getBucketPrivate(), uploadPath, file.getInputStream(), meta);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
putObjectRequest.setStorageClass(StorageClass.Standard);
|
||||
|
||||
// 上传文件
|
||||
cosClient.putObject(putObjectRequest);
|
||||
cosClient.shutdown();
|
||||
|
||||
// // 图片审核
|
||||
// Boolean imageAuditing = ciService.imageAuditing(uploadPath);
|
||||
// if (!imageAuditing) {
|
||||
// // 删除违规图片
|
||||
// cosClient.deleteObject(tencentCloudProperties.getBucketPrivate(), uploadPath);
|
||||
// throw new GuiguException(ResultCodeEnum.IMAGE_AUDITION_FAIL);
|
||||
// }
|
||||
|
||||
// 返回vo对象
|
||||
CosUploadVo cosUploadVo = new CosUploadVo();
|
||||
cosUploadVo.setUrl(uploadPath);
|
||||
// 图片临时访问url,回显使用
|
||||
String imageUrl = this.getImageUrl(uploadPath);
|
||||
cosUploadVo.setShowUrl(imageUrl);
|
||||
return cosUploadVo;
|
||||
}
|
||||
|
||||
public String getImageUrl(String path) {
|
||||
if (!StringUtils.hasText(path)) return "";
|
||||
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(tencentCloudProperties.getBucketPrivate(), path, HttpMethodName.GET);
|
||||
|
||||
// 设置临时URL有效期为15分钟
|
||||
Date date = new DateTime().plusMinutes(15).toDate();
|
||||
request.setExpiration(date);
|
||||
|
||||
// 调用方法获取
|
||||
URL url = cosClient.generatePresignedUrl(request);
|
||||
cosClient.shutdown();
|
||||
return url.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +1,30 @@
|
|||
package com.atguigu.daijia.driver.controller;
|
||||
|
||||
import com.atguigu.daijia.common.result.Result;
|
||||
import com.atguigu.daijia.driver.service.CosService;
|
||||
import com.atguigu.daijia.model.vo.driver.CosUploadVo;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@Slf4j
|
||||
@Tag(name = "腾讯云cos上传接口管理")
|
||||
@RestController
|
||||
@RequestMapping(value="/cos")
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
@RequestMapping(value = "/cos")
|
||||
public class CosController {
|
||||
|
||||
@Autowired
|
||||
private CosService cosService;
|
||||
|
||||
@Operation(summary = "上传文件")
|
||||
@PostMapping("upload")
|
||||
public Result<CosUploadVo> upload(@RequestPart("file") MultipartFile file,
|
||||
@RequestParam(name = "path", defaultValue = "auth") String path) {
|
||||
CosUploadVo vo = cosService.upload(file, path);
|
||||
return Result.ok(vo);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,29 @@
|
|||
package com.atguigu.daijia.driver.controller;
|
||||
|
||||
import com.atguigu.daijia.common.result.Result;
|
||||
import com.atguigu.daijia.driver.service.FileService;
|
||||
import com.atguigu.daijia.model.vo.driver.CosUploadVo;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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;
|
||||
|
||||
@Tag(name = "上传管理接口")
|
||||
@RestController
|
||||
@RequestMapping("file")
|
||||
public class FileController {
|
||||
|
||||
@Autowired
|
||||
private FileService fileService;
|
||||
|
||||
@Operation(summary = "上传")
|
||||
@PostMapping("/upload")
|
||||
public Result<String> upload(@RequestPart("file") MultipartFile file) {
|
||||
CosUploadVo cosUploadVo = fileService.upload(file);
|
||||
return Result.ok(cosUploadVo.getShowUrl());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
package com.atguigu.daijia.driver.service;
|
||||
|
||||
import com.atguigu.daijia.model.vo.driver.CosUploadVo;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
public interface CosService {
|
||||
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
*
|
||||
* @param file 文件
|
||||
* @param path path
|
||||
* @return CosUploadVo
|
||||
*/
|
||||
CosUploadVo upload(MultipartFile file, String path);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,15 @@
|
|||
package com.atguigu.daijia.driver.service;
|
||||
|
||||
import com.atguigu.daijia.model.vo.driver.CosUploadVo;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
public interface FileService {
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
*
|
||||
* @param file 文件
|
||||
* @return CosUploadVo
|
||||
*/
|
||||
CosUploadVo upload(MultipartFile file);
|
||||
}
|
||||
|
|
|
@ -1,13 +1,31 @@
|
|||
package com.atguigu.daijia.driver.service.impl;
|
||||
|
||||
import com.atguigu.daijia.common.result.Result;
|
||||
import com.atguigu.daijia.driver.client.CosFeignClient;
|
||||
import com.atguigu.daijia.driver.service.CosService;
|
||||
import com.atguigu.daijia.model.vo.driver.CosUploadVo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
public class CosServiceImpl implements CosService {
|
||||
|
||||
@Autowired
|
||||
private CosFeignClient cosFeignClient;
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
*
|
||||
* @param file 文件
|
||||
* @param path path
|
||||
* @return CosUploadVo
|
||||
*/
|
||||
@Override
|
||||
public CosUploadVo upload(MultipartFile file, String path) {
|
||||
Result<CosUploadVo> voResult = cosFeignClient.upload(file, path);
|
||||
return voResult.getData();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,31 @@
|
|||
package com.atguigu.daijia.driver.service.impl;
|
||||
|
||||
import com.atguigu.daijia.common.result.Result;
|
||||
import com.atguigu.daijia.driver.client.CosFeignClient;
|
||||
import com.atguigu.daijia.driver.service.FileService;
|
||||
import com.atguigu.daijia.model.vo.driver.CosUploadVo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
public class FileServiceImpl implements FileService {
|
||||
|
||||
@Autowired
|
||||
private CosFeignClient cosFeignClient;
|
||||
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
*
|
||||
* @param file 文件
|
||||
* @return CosUploadVo
|
||||
*/
|
||||
@Override
|
||||
public CosUploadVo upload(MultipartFile file) {
|
||||
Result<CosUploadVo> voResult = cosFeignClient.upload(file, "auth");
|
||||
return voResult.getData();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue