前後端分離——使用OSS

別遇見發表於2023-01-29

1. 第一步:編寫OSS的工具類

點選檢視程式碼
aliyun:
  oss:
    keyid: 填寫自己的
    keysecret: 填寫自己的
    endpoint: 填寫自己的
    bucketname: 填寫自己的
@Component
public class OSSUtils {

    public String urlOSS(MultipartFile img){
        //地域節點 --- id --- 金鑰 --- 儲存筒名稱
        String endpoint = AliYunOssClient.END_POINT;
        String accessKeyId = AliYunOssClient.KEY_ID;
        String accessKeySecret = AliYunOssClient.KEY_SECRET;
        String bucketName = AliYunOssClient.BUCKET_NAME;

        try {
            // 建立OSSClient例項。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            //獲取檔案上傳的輸入流
            InputStream inputStream = img.getInputStream();
            //獲取檔名稱
            String Filename = img.getOriginalFilename();
            /**
             * 1.解決上傳同一檔案而被新上傳的覆蓋,使用uuid進行拼接檔名使檔名唯一
             * 2.解決上傳檔案分類問題,根據時間進行分類
             */
            // 將uuid 轉為string 並且把-去除
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            Filename = uuid + Filename;

            /**
             * 使用的依賴是:
             * <dependency>
             *    <groupId>joda-time</groupId>
             *    <artifactId>joda-time</artifactId>
             *</dependency>
             * new DateTime().toString(),toString()傳入日期規則
             * yyyy/MM-dd   形成 年為一個資料夾,月-日為一個資料夾
             */
            org.joda.time.DateTime dateTime = new org.joda.time.DateTime();
            String date = dateTime.toString("yyyy/MM/dd");

            String filePath = date+"/"+Filename;

            /**
             * 第一個引數    bucket名字
             * 第二個引數    上傳檔案到阿里雲OSS的檔案路徑和檔名稱,filePath = path + fileName
             *              eg:/a/b/c.jpg
             * 第三個引數    是檔案輸入流
             */
            ossClient.putObject(bucketName,filePath,inputStream);

            //關閉ossClient
            ossClient.shutdown();

            String url = "https://"+bucketName+"."+endpoint+"/"+filePath;
            //System.out.println("================="+url);
            return url;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

2. OSS的屬性

點選檢視程式碼
@Data
  @Component
  @ConfigurationProperties(prefix = "aliyun.oss")
  public class AliYunOssClient implements InitializingBean {

    private String endPoint;
    private String keyId;
    private String keySecret;
    private String bucketName;

    public static String END_POINT;
    public static String KEY_ID;
    public static String KEY_SECRET;
    public static String BUCKET_NAME;

    //在給上面屬性透過配置檔案注入值之後,定義static變數,讓外界直接用類名.的方式獲取屬性
    //此方法在上面私有屬性被注入值之後,可以執行下面的方法
    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = endPoint;
        KEY_ID = keyId;
        KEY_SECRET = keySecret;
        BUCKET_NAME = bucketName;
    }
}

3. 上傳介面的Controller

點選檢視程式碼
/**
 * @author 胡銘陽
 * @ClassNameUploadController
 * @Authorhmy
 * @date 2023/1/2 10:17
 * @description:檔案圖片上傳
 */
@CrossOrigin
@RestController
public class UploadController {

    @Autowired
    private OSSUtils ossUtils;

    @PostMapping("/upload")
    public ResponseResult uploadImg(MultipartFile img){
        String s = ossUtils.urlOSS(img);
        return ResponseResult.okResult(s);
    }
}

4. service介面

點選檢視程式碼
/**
 * @author 胡銘陽
 * @ClassNameUploadService
 * @Authorhmy
 * @date 2023/1/2 10:19
 * @description:檔案圖片上傳
 */
public interface UploadService {

    /**
     * 圖片上傳
     * @param img:檔案
     * @return
     */
    ResponseResult uploadImg(MultipartFile img);
}

5. Impl實現類

點選檢視程式碼
/**
 * @author 胡銘陽
 * @ClassNameUploadServiceImpl
 * @Authorhmy
 * @date 2023/1/2 10:20
 * @description
 */
@Service
public class UploadServiceImpl implements UploadService {


    @Autowired
    private OSSUtils ossUtils;

    /**
     * 圖片上傳
     *
     * @param img :檔案
     * @return
     */
    @Override
    public ResponseResult uploadImg(MultipartFile img) {

        String originalFilename = img.getOriginalFilename();
        if (originalFilename.equals(".png")||originalFilename.equals(".jpg")||originalFilename.equals(".GIF")||originalFilename.equals(".BMP")){
            throw new SystemException(AppHttpCodeEnum.FILE_TYPE_ERROR);
        }
        String s = ossUtils.urlOSS(img);
        return ResponseResult.okResult(s);
    }

}

相關文章