天天看點

java如何上傳頭像----阿裡雲雲儲存OSS

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

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

(1)申請阿裡雲賬号

(2)實名認證

(3)開通“對象存儲OSS”服務

java如何上傳頭像----阿裡雲雲儲存OSS

 或者直接點選這個進入下面頁面,點選開通:https://www.aliyun.com/product/oss

java如何上傳頭像----阿裡雲雲儲存OSS

(4)進入管理控制台

點選最右側建立Bucket

java如何上傳頭像----阿裡雲雲儲存OSS

 填寫Bucket名稱

 讀寫權限改為:公共讀

 記住下邊藍色圈出來的後邊會用到

java如何上傳頭像----阿裡雲雲儲存OSS

  确認即可.

 二:阿裡雲測試

依次點選進入,點選上傳圖像,

java如何上傳頭像----阿裡雲雲儲存OSS

 拖拽或者點選選擇圖檔,即可上傳成功

java如何上傳頭像----阿裡雲雲儲存OSS

 三:擷取java代碼編寫必要的常量值

(1)endpoint:上邊讓儲存記住的内容

(2)bucketName:建立Access時候的名字

(3)accessKeyId

(4)accessKeySecret

擷取步驟

1.點選頭像,下拉框點選accesskeys,

java如何上傳頭像----阿裡雲雲儲存OSS

 2.彈出的框,點選繼續使用

java如何上傳頭像----阿裡雲雲儲存OSS

 建立一個AccessKey,按要求填寫驗證碼

java如何上傳頭像----阿裡雲雲儲存OSS

最後得到相應的

java如何上傳頭像----阿裡雲雲儲存OSS

 四:java代碼

依賴導入:

<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>
           

 配置檔案:

#服務端口
server.port=8002
#服務名
spring.application.name=service-oss
#環境設定:dev、test、prod
spring.profiles.active=dev

#阿裡雲 OSS
#不同的伺服器,位址不同
aliyun.oss.file.endpoint=your endpoint
aliyun.oss.file.keyid=your accessKeyId
aliyun.oss.file.keysecret=your accessKeySecret
#bucket可以在控制台建立,也可以使用java代碼建立
aliyun.oss.file.bucketname=guli-file
           

啟動類

package com.guli.oss;
@SpringBootApplication
@ComponentScan({"com.atguigu"})
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class OssApplication {
    public static void main(String[] args) {
        SpringApplication.run(OssApplication.class, args);
    }
}
           

從配置檔案讀取常量

建立常量讀取工具類:ConstantPropertiesUtil.java

使用@Value讀取application.properties裡的配置内容

用spring的 InitializingBean 的 afterPropertiesSet 來初始化配置資訊,這個方法将在所有的屬性被初始化後調用。

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;
    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT=endpoint;
        ACCESS_KEY_ID=keyId;
        ACCESS_KEY_SECRET=keySecret;
        BUCKET_NAME=bucketname;

    }
}
           

2、檔案上傳

建立Service接口:FileService.java

public interface FileService {

    String upload(MultipartFile file);
}
           

實作:FileServiceImpl.java

@Service
public class OssServiceImpl implements OssService {

    @Override
    public String uploadFileAvatar(MultipartFile file) {
        String endpoint= ConstantPropertiesUtils.END_POINT;
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret =ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName=ConstantPropertiesUtils.BUCKET_NAME;
        try {
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

            InputStream inputStream = file.getInputStream();
            //擷取檔案名稱
            String fileName=file.getOriginalFilename();
            //在檔案名稱裡邊添加一個随機唯一的值
            String uuid=UUID.randomUUID().toString().replaceAll("-","");
            fileName=uuid+fileName;
            //檔案按日期分類存到oss
            //擷取目前的日期
            String datePath=new DateTime().toString("yyyy/MMM/dd");
            fileName=datePath+"/"+fileName;

            ossClient.putObject(bucketName,fileName, inputStream);

            ossClient.shutdown();
            //傳回路徑
            String url="https://"+bucketName+"."+endpoint+"/"+fileName;
//            System.out.println(url);
            return url;
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
}
           

3、控制層

建立controller:FileUploadController.java

@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
public class OssController {
    @Autowired
    private OssService ossService;
    @PostMapping
    public R uploadOssFile(MultipartFile file){
        //傳回上傳到oss的路徑
        String url=ossService.uploadFileAvatar(file);
        return R.ok().data("url",url);
    }
}
           

代碼就寫完了,可以測試了!