
??什么是阿里云OSS
阿里云對象存儲(Alibaba Cloud Object Storage Service,簡稱OSS)是阿里云提供的海量、安全、低成本、高可靠的云存儲服務。用戶可以通過簡單的API接口在任何時間、任何地點上傳和下載數(shù)據(jù),適用于圖像、音視頻、文檔、網(wǎng)站等各種類型的數(shù)據(jù)存儲和分發(fā)場景。
?阿里云OSS的優(yōu)點
- 高可靠性:OSS采用了多副本存儲和容災備份機制,確保數(shù)據(jù)的高可靠性和持久性。
- 安全性:支持多種安全策略,如訪問控制、加密傳輸?shù)?,保障?shù)據(jù)的安全性。
- 彈性擴展:支持按需存儲和彈性擴展,用戶可以根據(jù)實際需求靈活調(diào)整存儲容量。
- 低成本:OSS的存儲費用低廉,且支持按量付費模式,使用戶能夠根據(jù)實際使用量付費
??????為什么要使用云服務OSS
解決本地存儲無法直接訪問,本地磁盤空間有限,本地磁盤損壞
這3個問題
??使用步驟
?OSS開通
(1)打開https://www.aliyun.com/ ,申請阿里云賬號并完成實名認證。
開通OSS
登錄阿里云官網(wǎng)。 點擊右上角的控制臺。
將鼠標移至產(chǎn)品,找到并單擊對象存儲OSS,打開OSS產(chǎn)品詳情頁面。在OSS產(chǎn)品詳情
頁中的單擊立即開通。
開通服務后,在OSS產(chǎn)品詳情頁面單擊管理控制臺直接進入OSS管理控制臺界面。您也
可以單擊位于官網(wǎng)首頁右上方菜單欄的控制臺,進入阿里云管理控制臺首頁,然后單
擊左側(cè)的對象存儲OSS菜單進入OSS管理控制臺界面。
創(chuàng)建存儲空間
新建Bucket,命名為 hmleadnews ,讀寫權(quán)限為 公共讀
?參考官方SDK
??編寫代碼
我把腳手架上傳到網(wǎng)盤里面了,有需要的同學自取
我用夸克網(wǎng)盤分享了「tlias-web-management」,點擊鏈接即可保存。
鏈接:https://pan.quark.cn/s/6171608c92b2
我們打開網(wǎng)盤里面的代碼
??在pom文件中添加下面的代碼
<!--阿里云OSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
??如果使用的是
Java 9及以上的版本
,則需要添加jaxb相關(guān)依賴。添加jaxb相關(guān)依賴示例代碼如下:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
?上傳文件
我們返回官方文檔,找到上傳文件
上傳字符串
以下代碼用于將字符串上傳到目標存儲空間examplebucket中exampledir目錄下的exampleobject.txt文件。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.ByteArrayInputStream;
public class Demo {
public static void main(String[] args) throws Exception {
// Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
String endpoint = "填寫自己的";
// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填寫B(tài)ucket名稱,例如examplebucket。
String bucketName = "examplebucket";
// 填寫Object完整路徑,完整路徑中不能包含Bucket名稱,例如exampledir/exampleobject.txt。
String objectName = "exampledir/exampleobject.txt";
// 創(chuàng)建OSSClient實例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// 填寫字符串。
String content = "Hello OSS,你好世界";
// 創(chuàng)建PutObjectRequest對象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
// 如果需要上傳時設(shè)置存儲類型和訪問權(quán)限,請參考以下示例代碼。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);
// 上傳字符串。
PutObjectResult result = ossClient.putObject(putObjectRequest);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
把代碼的相關(guān)內(nèi)容修改為自己的
??綜合案例
我們創(chuàng)建工具類包,導入阿里云工具類相關(guān)代碼
package com.itheima.utils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;
/**
* 阿里云 OSS 工具類
*/
public class AliOSSUtils {
private String endpoint = "填寫自己的";
private String accessKeyId = "填寫自己的";
private String accessKeySecret = "填寫自己的";
private String bucketName = "填寫自己的";
/**
* 實現(xiàn)上傳圖片到OSS
*/
public String upload(MultipartFile file) throws IOException {
// 獲取上傳的文件的輸入流
InputStream inputStream = file.getInputStream();
// 避免文件覆蓋
String originalFilename = file.getOriginalFilename();
String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
//上傳文件到 OSS
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(bucketName, fileName, inputStream);
//文件訪問路徑
String url = endpoint.split("http://")[0] + "http://" + bucketName + "." + endpoint.split("http://")[1] + "/" + fileName;
// 關(guān)閉ossClient
ossClient.shutdown();
return url;// 把上傳到oss的路徑返回
}
}
把代碼的相關(guān)內(nèi)容修改為自己的
在AliOSSUtils中加上@Component注解,交給ioc容器進行管理
編寫UploadController類
寫入下面的代碼
package com.itheima.controller;
import com.itheima.pojo.Result;
import com.itheima.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@Slf4j
@RestController
public class UploadController {
@Autowired
private AliOSSUtils aliOSSUtils;
@PostMapping("/upload")
public Result upload(MultipartFile image) throws IOException {
log.info("文件上傳,文件名{}",image.getOriginalFilename());
//調(diào)用阿里云OSS工具類進行文件上傳
String url=aliOSSUtils.upload(image);
log.info("文件上傳完成,url:{}", url);
return Result.success(url);
}
}
完結(jié),散花!文章來源:http://www.zghlxwxcb.cn/news/detail-759859.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-759859.html
到了這里,關(guān)于【SpringBoot篇】阿里云OSS—存儲文件的利器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!