【技术积累】腾讯/阿里云对象存储上传+删除

腾讯/阿里云对象存储上传+删除

  1. 创建储存桶 (后面会用到 储存库名称、访问域名、以及region) region(地域和访问域名)的查询参考: https://cloud.tencent.com/document/product/436/6224
  2. https://www.aliyun.com/product/oss

常用的阿里云、腾讯云

2.创建Api密钥 (后面会用到 secretId、secretKey)

application.yml

yml 复制代码
qcloud:
  path: 域名地址
  bucketName: 储存库名称
  secretId: 密钥生成的secretId
  secretKey: 密钥生成的secretKey
  region: 地域简称
  prefix: /images/

工具类:

java 复制代码
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.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * @author 
 * @date 2021/6/6 19:31
 * @role
 */
@Data
public class QCloudCosUtils {
    //API密钥secretId
    private String secretId;
    //API密钥secretKey
    private String secretKey;
    //存储桶所属地域
    private String region;
    //存储桶空间名称
    private String bucketName;
    //存储桶访问域名
    private String path;
    //上传文件前缀路径(eg:/images/)
    private String prefix;

    /**
     * 上传File类型的文件
     *
     * @param file
     * @return 上传文件在存储桶的链接
     */
    public String upload(File file) {
        //生成唯一文件名
        String newFileName = generateUniqueName(file.getName());
        //文件在存储桶中的key
        String key = prefix + newFileName;
        //声明客户端
        COSClient cosClient = null;
        try {
            //初始化用户身份信息(secretId,secretKey)
            COSCredentials cosCredentials = new BasicCOSCredentials(secretId, secretKey);
            //设置bucket的区域
            ClientConfig clientConfig = new ClientConfig(new Region(region));
            //生成cos客户端
            cosClient = new COSClient(cosCredentials, clientConfig);
            //创建存储对象的请求
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file);
            //执行上传并返回结果信息
            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
            return path + key;
        } catch (CosClientException e) {
            e.printStackTrace();
        } finally {
            cosClient.shutdown();
        }
        return null;
    }

    /**
     * upload()重载方法
     *
     * @param multipartFile
     * @return 上传文件在存储桶的链接
     */
    public String upload(MultipartFile multipartFile) {
        System.out.println(multipartFile);
        //生成唯一文件名
        String newFileName = generateUniqueName(multipartFile.getOriginalFilename());
        //文件在存储桶中的key
        String key = prefix + newFileName;
        //声明客户端
        COSClient cosClient = null;
        //准备将MultipartFile类型转为File类型
        File file = null;
        try {
            //生成临时文件
            file = File.createTempFile("temp", null);
            //将MultipartFile类型转为File类型
            multipartFile.transferTo(file);
            //初始化用户身份信息(secretId,secretKey)
            COSCredentials cosCredentials = new BasicCOSCredentials(secretId, secretKey);
            //设置bucket的区域
            ClientConfig clientConfig = new ClientConfig(new Region(region));
            //生成cos客户端
            cosClient = new COSClient(cosCredentials, clientConfig);
            //创建存储对象的请求
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file);
            //执行上传并返回结果信息
            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
            return path + key;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            cosClient.shutdown();
        }
        return null;
    }

    /**
     * 根据UUID生成唯一文件名
     *
     * @param originalName
     * @return
     */
    public String generateUniqueName(String originalName) {
        return UUID.randomUUID() + originalName.substring(originalName.lastIndexOf("."));
    }
    /**
     * 删除文件
     */
    public boolean deleteFile(String fileName) {
        String key = prefix + fileName;
        COSClient cosclient = null;
        try {
            //初始化用户身份信息(secretId,secretKey)
            COSCredentials cosCredentials = new BasicCOSCredentials(secretId, secretKey);
            //设置bucket的区域
            ClientConfig clientConfig = new ClientConfig(new Region(region));
            // 生成cos客户端
            cosclient = new COSClient(cosCredentials, clientConfig);
            // 指定要删除的 bucket 和路径
            cosclient.deleteObject(bucketName, key);
            // 关闭客户端(关闭后台线程)
            cosclient.shutdown();
        }catch (CosClientException e) {
            e.printStackTrace();
        }
        return true;
    }
}
java 复制代码
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import studio.banner.officialwebsite.util.QCloudCosUtils;
/**
 * 腾讯云对象存储
 */
@Configuration
public class QCloudCosUtilsConfig {
    @ConfigurationProperties(prefix = "qcloud")
    @Bean
    public QCloudCosUtils qcloudCosUtils() {
        return new QCloudCosUtils();
    }
}
java 复制代码
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import studio.banner.officialwebsite.entity.RespBean;
import studio.banner.officialwebsite.service.IFileUploadService;

/**
 * @author 
 * @date 2021/6/6 19:42
 * @role
 */
@RestController
@Api(tags = "腾讯云上传接口", value = "TencentPhotoController")
public class TencentPhotoController {
    protected static final Logger logger = LoggerFactory.getLogger(TencentPhotoController.class);
    @Autowired
    private IFileUploadService iFileUploadService;
    @PostMapping(value = "/upload")
    @ApiOperation(value = "腾讯云上传接口",notes = "上传图片不能为空",httpMethod = "POST")
    public RespBean upload(@RequestPart MultipartFile multipartFile) {
        String url = iFileUploadService.upload(multipartFile);
        return RespBean.ok("上传成功",url);
    }
    @DeleteMapping("delete")
    @ApiOperation(value = "腾讯云删除接口",httpMethod = "DELETE")
    @ApiImplicitParam(name = "fileName",value = "图片名",dataTypeClass = String.class)
    public RespBean delete(@RequestParam String  fileName) {
        if (iFileUploadService.delete(fileName)){
            return RespBean.ok("删除成功");
        }
        return RespBean.error("删除失败");

    }

}
相关推荐
坐吃山猪11 分钟前
SpringBoot01-配置文件
java·开发语言
我叫汪枫35 分钟前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
yaoxtao44 分钟前
java.nio.file.InvalidPathException异常
java·linux·ubuntu
Swift社区2 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言
DKPT3 小时前
JVM中如何调优新生代和老生代?
java·jvm·笔记·学习·spring
phltxy3 小时前
JVM——Java虚拟机学习
java·jvm·学习
seabirdssss5 小时前
使用Spring Boot DevTools快速重启功能
java·spring boot·后端
喂完待续5 小时前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升
benben0445 小时前
ReAct模式解读
java·ai