SpringBoot整合阿里云OSS對(duì)象存儲(chǔ)服務(wù)實(shí)現(xiàn)文件上傳
1. 準(zhǔn)備工作:
一、首先登錄阿里云OSS對(duì)象存儲(chǔ)控制臺(tái)創(chuàng)建一個(gè)Bucket作為你的存儲(chǔ)空間。
二、創(chuàng)建Access Keyan按要求創(chuàng)建進(jìn)行,這里的方法步驟我就不展現(xiàn)出來(lái)了,你們可以自行查詢阿里云文檔,這個(gè)獲取值本身就不難。
重點(diǎn):記下你的AccessKey ID、AccessKey Secret以及你剛才創(chuàng)建的Buacket名字BucketName。
2. 配置:
在pom里引入oss要用的依賴
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency>
在application.yml里面添加配置文件
# 定義的端口號(hào) server: port: 8080 aliyun: oss: #yourEndpoint填寫B(tài)ucket所在地域?qū)?yīng)的Endpoint,可在創(chuàng)建好的Bucket概況頁(yè)查看。 endpoint: oss-cn-chengdu.aliyuncs.com # 以成都為例,Endpoint填寫為https://oss-cn-chengdu.aliyuncs.com #阿里云賬號(hào)AccessKey擁有所有API的訪問(wèn)權(quán)限,風(fēng)險(xiǎn)很高。強(qiáng)烈建議您創(chuàng)建并使用RAM用戶進(jìn)行API訪問(wèn)或日常運(yùn)維,請(qǐng)登錄RAM控制臺(tái)創(chuàng)建RAM用戶 accessKeyId: ********** # 阿里云賬號(hào)AccessKey里所對(duì)應(yīng)的AccessKey ID accessKeySecret: ********** # 阿里云賬號(hào)AccessKey里所對(duì)應(yīng)的AccessKey Secret bucketName: ********** # OSS對(duì)象存儲(chǔ)空間名
3. 詳細(xì)代碼:
第一步:創(chuàng)建一個(gè)service包,新建一個(gè)AliyunOssService.java
import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.util.Map; @Service public interface AliyunOssService { Map<String, Object> upload(MultipartFile file, String fileName); }
第二步:在service包里創(chuàng)建一個(gè)impl包,新建一個(gè)AliyunOssServiceImpl.java
import com.system.demo.service.AliyunOssService; import com.system.demo.util.FileUploadUtil; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; @Service("aliyunOssService") public class AliyunOssServiceImpl implements AliyunOssService { @Resource private FileUploadUtil fileUploadUtil; @Override public Map<String, Object> upload(MultipartFile file, String fileName){ //定義一個(gè)目錄(這里的目錄可根據(jù)自己實(shí)際情況自己拼接定義) String path = "a"; //我這里就隨便定義一個(gè)a文件夾 //拼接,這里將路徑和文件名拼接在了一起 fileName = path + "/" +fileName; Map<String, Object> map =new HashMap<>(); map.put("code", 200); map.put("msg", "查詢成功"); map.put("data", this.fileUploadUtil.upload(file, fileName)); return map; } }
第三步:創(chuàng)建一個(gè)util包,新建一個(gè)FileUploadUtil.java
import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.ObjectMetadata; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; @Component public class FileUploadUtil { @Value("${aliyun.oss.endpoint}") private String endpoint; @Value("${aliyun.oss.accessKeyId}") private String accessKeyId; @Value("${aliyun.oss.accessKeySecret}") private String accessKeySecret; @Value("${aliyun.oss.bucketName}") private String bucketName; public String upload(MultipartFile file, String fileName){ // 寫入文件 try { //獲取上傳的輸入流 InputStream inputStream = file.getInputStream(); //設(shè)置訪問(wèn)地址是默認(rèn)是預(yù)覽圖片 ObjectMetadata meta = new ObjectMetadata(); meta.setContentType("image/jpg"); // 創(chuàng)建OSSClient實(shí)例 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); /* 調(diào)用oss上傳到阿里云對(duì)象存儲(chǔ)oss----Bucket存儲(chǔ)空間 第一個(gè)參數(shù) bucket名稱 第二個(gè)參數(shù) 文件名稱 第三個(gè)參數(shù) 輸入流 第四個(gè)參數(shù) 文件類型 */ ossClient.putObject(bucketName, fileName, inputStream, meta); // 刪除文件。如需刪除文件夾,請(qǐng)將ObjectName設(shè)置為對(duì)應(yīng)的文件夾名稱。如果文件夾非空,則需要將文件夾下的所有object刪除后才能刪除該文件夾。 //ossClient.deleteObject(bucketName, "a/"); // 關(guān)閉OSSClient。 ossClient.shutdown(); //上傳成功后獲取文件路徑 String url = "https://" + bucketName + "." + endpoint + "/"+ fileName; return url; } catch (IOException e) { e.printStackTrace(); } return null; } }
第四步:定義接口創(chuàng)建一個(gè)controller包,新建一個(gè)FileUpload.java
import com.system.demo.service.impl.AliyunOssServiceImpl; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.Map; @RestController @RequestMapping("oss") public class FileUpload { @Resource private AliyunOssServiceImpl aliyunOssServiceImpl; @RequestMapping(value = "fileoss", method = RequestMethod.POST) public Map<String, Object> uploadOssFile(MultipartFile file, String fileName){ return this.aliyunOssServiceImpl.upload(file, fileName); } }
4. 測(cè)試:
首先運(yùn)行啟動(dòng)類,在Postman進(jìn)行測(cè)試
選擇請(qǐng)求方式:POST
請(qǐng)求路徑:localhost:8080/oss/fileoss
選擇Body-->form-data
-----第一列數(shù)據(jù):KEY為file,選擇類型為File,添加VALUE為自己想要上傳的文件;
-----第二列數(shù)據(jù):KEY為fileName,選擇類型為Text,添加VALUE為的文件名
如下圖:
添加完成后,點(diǎn)擊send,發(fā)起請(qǐng)求,等待返回?cái)?shù)據(jù),返回的JSON格式中data所對(duì)應(yīng)的地址,為該文件的預(yù)覽地址。
同時(shí),你也可在你的OSS里面查看你的文件。
以上就是SpringBoot整合阿里云OSS對(duì)象存儲(chǔ)實(shí)現(xiàn)文件上傳的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot整合阿里云OSS的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot使用Minio進(jìn)行文件存儲(chǔ)的實(shí)現(xiàn)
- SpringBoot中整合Minio文件存儲(chǔ)的安裝部署過(guò)程
- Springboot集成minio實(shí)現(xiàn)文件存儲(chǔ)的實(shí)現(xiàn)代碼
- SpringBoot整合騰訊云COS對(duì)象存儲(chǔ)實(shí)現(xiàn)文件上傳的示例代碼
- SpringBoot 使用Mongo的GridFs實(shí)現(xiàn)分布式文件存儲(chǔ)操作
- springboot臨時(shí)文件存儲(chǔ)目錄配置方式
- Spring File Storage文件的對(duì)象存儲(chǔ)框架基本使用小結(jié)
相關(guān)文章
ArrayList源碼探秘之Java動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)
這篇文章將帶大家從ArrayList源碼來(lái)探秘一下Java動(dòng)態(tài)數(shù)組的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),對(duì)我們深入了解JavaScript有一定的幫助,需要的可以參考一下2023-08-08SpringCloud及Nacos服務(wù)注冊(cè)IP選擇問(wèn)題解決方法
這篇文章主要介紹了SpringCloud及Nacos服務(wù)注冊(cè)IP選擇問(wèn)題,為什么注冊(cè)的IP和真實(shí)IP不符合呢,原因是Nacos客戶端在注冊(cè)服務(wù)時(shí)會(huì)從機(jī)器網(wǎng)卡中選擇一個(gè)IP來(lái)注冊(cè),所以,當(dāng)注冊(cè)了的是非真實(shí)IP后,另一臺(tái)機(jī)器調(diào)用時(shí)是不可能調(diào)通的,知道問(wèn)題原因就是解決方法,一起看看吧2024-01-01springboot實(shí)現(xiàn)注冊(cè)加密與登錄解密功能(demo)
這篇文章主要介紹了springboot實(shí)現(xiàn)注冊(cè)的加密與登錄的解密功能,本文通過(guò)demo實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02使用eclipse 實(shí)現(xiàn)將springboot項(xiàng)目打成jar包
這篇文章主要介紹了使用eclipse 實(shí)現(xiàn)將springboot項(xiàng)目打成jar包的流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07java 動(dòng)態(tài)增加定時(shí)任務(wù)示例
本篇文章主要介紹了java 動(dòng)態(tài)增加定時(shí)任務(wù)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03java獲取nvidia顯卡信息的實(shí)現(xiàn)示例
現(xiàn)在的需求是要獲取nvidia顯卡的使用情況,本文主要介紹了java獲取nvidia顯卡信息的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02