1. 程式人生 > 其它 >阿里雲OSS物件儲存

阿里雲OSS物件儲存

1、引入依賴

<!-- aliyun oss -->
<dependency>
   <groupId>com.aliyun.oss</groupId>
   <artifactId>aliyun-sdk-oss</artifactId>
   <version>3.13.0</version>
</dependency>
<dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.4</version>
</dependency>

2、新增配置

#阿里雲 OSS
#不同的伺服器,地址不同
aliyun:
  oss:
    file:
      endpoint: oss-accelerate.aliyuncs.com
      keyid: ****************
      keysecret: *******************
      bucketname: qingb
      filehost: qingbfolder

3、讀取配置類

package com.bt.usercenter.oss.utils;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

@Component
public class ConstantPropertiesUtils implements InitializingBean {
 
    //讀取配置檔案內容
    @Value("${aliyun.oss.file.endpoint}")
    private String endpoint;
 
    @Value("${aliyun.oss.file.keyid}")
    private String keyId;
 
    @Value("${aliyun.oss.file.keysecret}")
    private String keySecret;
 
    @Value("${aliyun.oss.file.bucketname}")
    private String bucketName;

    @Value("${aliyun.oss.file.filehost}")
    private String fileHost;

    //定義公開靜態常量
    public static String END_POIND;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;
    public static String BUCKET_NAME;
    public static String FILE_HOST;
 
    @Override
    public void afterPropertiesSet() throws Exception {
        END_POIND = endpoint;
        ACCESS_KEY_ID = keyId;
        ACCESS_KEY_SECRET = keySecret;
        BUCKET_NAME = bucketName;
        FILE_HOST = fileHost;
    }
}

4、工具類

package com.bt.usercenter.oss.utils;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
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.slf4j.LoggerFactory;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class AliyunOSSUtil {
 
    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(AliyunOSSUtil.class);
 
 
    public static String upload(File file){
        logger.info("=========>OSS檔案上傳開始:"+file.getName());
        String endpoint=ConstantPropertiesUtils.END_POIND;
        String accessKeyId=ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret=ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName=ConstantPropertiesUtils.BUCKET_NAME;
        String fileHost=ConstantPropertiesUtils.FILE_HOST;
 
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String dateStr = format.format(new Date());
 
        if(null == file){
            return null;
        }
 
        OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret);
        try {
            //容器不存在,就建立
            if(! ossClient.doesBucketExist(bucketName)){
                ossClient.createBucket(bucketName);
                CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
                createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
                ossClient.createBucket(createBucketRequest);
            }
            //建立檔案路徑
            String fileUrl = fileHost+"/"+(dateStr + "/" + UUID.randomUUID().toString().replace("-","")+"-"+file.getName());
            //上傳檔案
            PutObjectResult result = ossClient.putObject(new PutObjectRequest(bucketName, fileUrl, file));
            //設定許可權 這裡是公開讀
            ossClient.setBucketAcl(bucketName,CannedAccessControlList.PublicRead);
            if(null != result){
                logger.info("==========>OSS檔案上傳成功,OSS地址:"+fileUrl);
                return fileUrl;
            }
        }catch (OSSException oe){
            logger.error(oe.getMessage());
        }catch (ClientException ce){
            logger.error(ce.getMessage());
        }finally {
            //關閉
            ossClient.shutdown();
        }
        return null;
    }
}

5、Controller

package com.bt.usercenter.controller.user;

import com.bt.usercenter.oss.utils.AliyunOSSUtil;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;

@Controller
@RequestMapping("upload")
public class UploadController {

    private final org.slf4j.Logger logger = LoggerFactory.getLogger(getClass());
    /**
     * 檔案上傳
     * @param file
     */
    @ApiOperation("上傳測試介面")
    @RequestMapping(value = "/uploadBlog",method = RequestMethod.POST)
    public String uploadBlog(@ApiParam(value="檔案",required=true)@RequestPart("file") MultipartFile file){
        String uploadUrl = "";
        logger.info("============>檔案上傳");
        try {
            if(null != file){
                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.transferTo(newFile);
                    //上傳到OSS
                    uploadUrl = AliyunOSSUtil.upload(newFile);
                }
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return uploadUrl;
    }
 
}