25.阿里雲OSS--雲存儲


一、開通對象存儲OSS

為了解決海量數據存儲與彈性擴容,項目中我們采用雲存儲的解決方案- 阿里雲OSS。 

1、開通“對象存儲OSS”服務

(1)申請阿里雲賬號
(2)實名認證
(3)開通“對象存儲OSS”服務
(4)進入管理控制台

2、創建Bucket

選擇:低頻訪問、公共讀、不開通

3、查看並記錄id和秘鑰

4、OSS幫助文檔

 

 

 https://help.aliyun.com/document_detail/32008.html?spm=5176.208357.1107607.21.2b6e390feDXmJ6

二、java代碼操作阿里雲oss

1、在service模塊中創建子模塊service_oss

2、在service_oss的pom文件中引入相關oss依賴

    <dependencies>
        <!-- 阿里雲oss依賴 -->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
        </dependency>

        <!-- 日期工具欄依賴 -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
        </dependency>
    </dependencies>

3、在resources中創建配置文件application.properties

#服務端口
server.port=8002
#服務名
spring.application.name=service-oss

#環境設置:dev、test、prod
spring.profiles.active=dev

#阿里雲 OSS
#不同的服務器,地址不同
aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=LTAI4GAeLQ4ByaQARKZMnXyj
aliyun.oss.file.keysecret=JSh6nc9XFq2LjRNOBBgyKMCPhEE0c7
#bucket可以在控制台創建,也可以使用java代碼創建
aliyun.oss.file.bucketname=edu-0317

4、創建啟動類OssApplication

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class )//參數表示不加載數據庫
@ComponentScan({"com.atguigu"})
public class OssApplication {
    public static void main(String[] args) {
        SpringApplication.run(OssApplication.class, args);
    }
}

 注意:由於此模塊不需要操作數據庫,只是做上傳到oss功能,沒有配置數據庫,因此需要在注入@SpringBootApplication中加入對應參數。

5、創建Oss對應的bean、controller和service

在com.atguigu.oss文件夾下創建utils/ConstantPropertiesUtils類

//當項目已啟動,spring接口,spring加載之后,執行接口一個方法
@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;

    //定義公開靜態常量
    public static String END_POINT;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;
    public static String BUCKET_NAME;

    //spring將上面值都執行之后執行下面方法
    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = endpoint;
        ACCESS_KEY_ID = keyid;
        ACCESS_KEY_SECRET = keysecret;
        BUCKET_NAME = bucketname;
    }
}

在com.atguigu.oss文件夾下創建controller/OssController類 

@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
public class OssController {

    @Autowired
    private OssService ossService;

    //上傳頭像的方法
    @PostMapping
    public R uploadOssFile(MultipartFile file) {
        //獲取上傳文件 MultipartFile
        //返回上傳到oss的路徑
        String url = ossService.uploadFileAvatar(file);
        return R.ok().data("url",url);
    }
}

在com.atguigu.oss文件夾下創建service/OssService接口

public interface OssService {
    //上傳頭像到oss
    String uploadFileAvatar(MultipartFile file);
}

在com.atguigu.oss文件夾下創建service/impl/OssServiceImpl接口實現類

@Service
public class OssServiceImpl implements OssService {

    //上傳頭像到oss
    @Override
    public String uploadFileAvatar(MultipartFile file) {

        // yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = ConstantPropertiesUtils.END_POINT;
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;

        try {
            // 創建OSSClient實例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

            // 獲取上傳文件輸入流
            InputStream inputStream = file.getInputStream();

            //獲取文件名稱
            String fileName = file.getOriginalFilename();

            //1 在文件名稱里面添加隨機唯一的值
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            //yuy76sad1.jepy
            fileName = uuid + fileName;

            //2 把文件按照日期進行分類
            //獲取當前日期
            //   2021/03/17
            String datePath = new DateTime().toString("yyyy/MM/dd");

            //拼接
            //2021/03/17/1.jepg
            fileName = datePath + "/" + fileName;

            // 調用oss方法實現上傳
            //第一個參數  Bucket名稱
            //第二個參數  上傳到oss文件路徑和文件名稱  /aa/bb/01.jepg
            //第三個參數  上傳文件輸入流
            ossClient.putObject(bucketName, fileName, inputStream);

            // 關閉OSSClient。
            ossClient.shutdown();

            //把上傳之后文件路徑返回
            //需要把上傳到阿里雲oss路徑手動拼接出來
            // https://edu-0317.oss-cn-beijing.aliyuncs.com/1.jpeg
            String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
            return url;
        }catch(Exception e) {
      e.printStackTrace();
      return null;
} } }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM