騰訊對象雲存儲

存儲成功:數據庫

 

1、引入pomjson

<dependency>
            <groupId>com.qcloud</groupId>
            <artifactId>cos_api</artifactId>
            <version>4.4</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

 

2、騰訊配置api

 

 

3、代碼數組

 

1、controller

/**
     * 上傳文件
     */
    @PostMapping("/upload")
    @ResponseBody
    public R upload(@RequestParam("file") MultipartFile file) throws Exception {

        //上傳文件
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        String url = CloudFactory.build().uploadSuffix(file.getBytes(), suffix);

        System.out.println("url=" + url);
、、                             這裏須要將地址保存到數據庫
        return R.ok().put("url", url);
    }

 

工廠類app

public class CloudFactory {
    
    public static CloudStorageService build(){
        //獲取雲存儲配置信息
        CloudStorageConfig config = new CloudStorageConfig();
        config.setQcloudAppId(1256);
        config.setQcloudBucketName("ly");
        config.setQcloudDomain("https://ly8.cossh.myqcloud.com");
        config.setQcloudPrefix("");
        config.setQcloudRegion("sh");
        config.setQcloudSecretId("6RdXDerpa7PSFm3RpKZ");
        config.setQcloudSecretKey("7zd191cx2rUXLtCFG3bu2va1DAs");
        
        return new QcloudCloudStorageService(config);
    }

構建配置dom

 

抽象類ssh

/**
 * 雲存儲(支持七牛、阿里雲、騰訊雲、又拍雲)
 * @author    lyon
 * @date    2018年3月27日
 */
public abstract class CloudStorageService {
     /** 雲存儲配置信息 */
    CloudStorageConfig config;

    /**
     * 文件路徑
     * @param prefix 前綴
     * @param suffix 後綴
     * @return 返回上傳路徑
     */
    public String getPath(String prefix, String suffix) {
        //生成uuid
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        //文件路徑
        String path = DateUtils.format(new Date(), "yyyyMMdd") + "/" + uuid;

        if(StringUtils.isNotBlank(prefix)){
            path = prefix + "/" + path;
        }

        return path + suffix;
    }

    /**
     * 文件上傳
     * @param data    文件字節數組
     * @param path    文件路徑,包含文件名
     * @return        返回http地址
     */
    public abstract String upload(byte[] data, String path);

    /**
     * 文件上傳
     * @param data     文件字節數組
     * @param suffix   後綴
     * @return         返回http地址
     */
    public abstract String uploadSuffix(byte[] data, String suffix);

    /**
     * 文件上傳
     * @param inputStream   字節流
     * @param path          文件路徑,包含文件名
     * @return              返回http地址
     */
    public abstract String upload(InputStream inputStream, String path);

    /**
     * 文件上傳
     * @param inputStream  字節流
     * @param suffix       後綴
     * @return             返回http地址
     */
    public abstract String uploadSuffix(InputStream inputStream, String suffix);
}

 

配置類beanide

public class CloudStorageConfig {
    
    //騰訊雲綁定的域名
    private String qcloudDomain;
    //騰訊雲路徑前綴
    private String qcloudPrefix;
    //騰訊雲AppId
    private Integer qcloudAppId;
    //騰訊雲SecretId
    private String qcloudSecretId;
    //騰訊雲SecretKey
    private String qcloudSecretKey;
    //騰訊雲BucketName
    private String qcloudBucketName;
    //騰訊雲COS所屬地區
    private String qcloudRegion;

 

實際實現類ui

public class QcloudCloudStorageService extends CloudStorageService {
   
    private COSClient client;

    public QcloudCloudStorageService(CloudStorageConfig config){
        this.config = config;

        //初始化
        init();
    }

    private void init(){
        Credentials credentials = new Credentials(config.getQcloudAppId(), config.getQcloudSecretId(),
                config.getQcloudSecretKey());
        
        //初始化客戶端配置
        ClientConfig clientConfig = new ClientConfig();
        //設置bucket所在的區域,華南:gz 華北:tj 華東:sh
        clientConfig.setRegion(config.getQcloudRegion());
        
        client = new COSClient(clientConfig, credentials);
    }

    @Override
    public String upload(byte[] data, String path) {
        //騰訊雲必須要以"/"開頭
        if(!path.startsWith("/")) {
            path = "/" + path;
        }
        
        //上傳到騰訊雲
        UploadFileRequest request = new UploadFileRequest(config.getQcloudBucketName(), path, data);
        String response = client.uploadFile(request);

        JSONObject jsonObject = JSONObject.fromObject(response);
        if(jsonObject.getInt("code") != 0) {
            try {
                throw new Exception("文件上傳失敗," + jsonObject.getString("message"));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return config.getQcloudDomain() + path;
    }

    @Override
    public String upload(InputStream inputStream, String path) {
        try {
            byte[] data = IOUtils.toByteArray(inputStream);
            return this.upload(data, path);
        } catch (IOException e) {
            try {
                throw new Exception("上傳文件失敗", e);
            } catch (Exception e1) {
                e1.printStackTrace();
                return null;
            }
        }
    }

    @Override
    public String uploadSuffix(byte[] data, String suffix) {
        return upload(data, getPath(config.getQcloudPrefix(), suffix));
    }

    @Override
    public String uploadSuffix(InputStream inputStream, String suffix) {
        return upload(inputStream, getPath(config.getQcloudPrefix(), suffix));
    }
}
相關文章
相關標籤/搜索