springboot工程如何使用阿里云OSS傳輸文件
OSS對(duì)象存儲(chǔ)簡(jiǎn)介
對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,簡(jiǎn)稱(chēng)OSS)
阿里云對(duì)象存儲(chǔ)OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù),提供99.9999999999%(12個(gè)9)的數(shù)據(jù)持久性,99.995%的數(shù)據(jù)可用性。多種存儲(chǔ)類(lèi)型供選擇,全面優(yōu)化存儲(chǔ)成本。非常適合存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù),例如視頻、圖形、日志、文本文件以及各種App應(yīng)用、多終端同步軟件、網(wǎng)盤(pán)下載站的文件等,單個(gè)文件的大小從1字節(jié)到48.8TB,可以存儲(chǔ)的個(gè)數(shù)無(wú)限制;
springboot工程使用阿里云OSS傳輸文件
在application.yml文件中引入對(duì)應(yīng)的配置,一個(gè)是對(duì)應(yīng)的節(jié)點(diǎn),兩個(gè)是密鑰和賬號(hào),還有一個(gè)是對(duì)應(yīng)文件的名稱(chēng);
采用這樣方式進(jìn)行解耦,便于后期修改。
然后需要設(shè)置一個(gè)properties類(lèi),去讀對(duì)應(yīng)的配置信息用到了ConfigurationProperties類(lèi),對(duì)應(yīng)掃描的是alioss;
編寫(xiě)對(duì)應(yīng)的工具類(lèi)
@Data @AllArgsConstructor @Slf4j public class AliOssUtil { private String endpoint; private String accessKeyId; private String accessKeySecret; private String bucketName; /** * 文件上傳 * * @param bytes * @param objectName * @return */ public String upload(byte[] bytes, String objectName) { // 創(chuàng)建OSSClient實(shí)例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { // 創(chuàng)建PutObject請(qǐng)求。 ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes)); } 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(); } } //文件訪問(wèn)路徑規(guī)則 https://BucketName.Endpoint/ObjectName StringBuilder stringBuilder = new StringBuilder("https://"); stringBuilder .append(bucketName) .append(".") .append(endpoint) .append("/") .append(objectName); log.info("文件上傳到:{}", stringBuilder.toString()); return stringBuilder.toString(); } }
返回文件存儲(chǔ)的地址
在controller中編寫(xiě)上傳方法;
@RestController @RequestMapping("/admin/common") @Api(tags = "通用接口") @Slf4j public class CommonController { @Autowired private AliOssUtil aliOssUtil; /** * 文件上傳 * @param file * @return */ @PostMapping("/upload") @ApiOperation("文件上傳") public Result<String> upload(MultipartFile file){ log.info("文件上傳:{}",file); try { //原始文件名 String originalFilename = file.getOriginalFilename(); //截取原始文件名的后綴 dfdfdf.png String extension = originalFilename.substring(originalFilename.lastIndexOf(".")); //構(gòu)造新文件名稱(chēng) String objectName = UUID.randomUUID().toString() + extension; //文件的請(qǐng)求路徑 String filePath = aliOssUtil.upload(file.getBytes(), objectName); return Result.success(filePath); } catch (IOException e) { log.error("文件上傳失敗:{}", e); } return Result.error(MessageConstant.UPLOAD_FAILED); } }
采用的UUID.randomUUID().toString() ,這個(gè)是隨機(jī)命名,可以防止上傳文件名稱(chēng)出現(xiàn)重復(fù)。
還需要配置對(duì)應(yīng)的Configuration類(lèi),初始化阿里云對(duì)象,把他交給bean進(jìn)行管理
*/ @Configuration //配置類(lèi) @Slf4j public class OssConfiguration { //配置類(lèi) 用于初始化對(duì)象 @Bean @ConditionalOnMissingBean public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){ log.info("開(kāi)始創(chuàng)建阿里云文件上傳工具類(lèi)對(duì)象:{}",aliOssProperties); return new AliOssUtil(aliOssProperties.getEndpoint(), aliOssProperties.getAccessKeyId(), aliOssProperties.getAccessKeySecret(), aliOssProperties.getBucketName()); } }
這邊是因?yàn)樵贑ontroller中使用了依賴(lài)注入,需要將對(duì)象交給bean進(jìn)行管理,編寫(xiě)對(duì)應(yīng)的Configuration類(lèi);
到此這篇關(guān)于springboot工程使用阿里云OSS傳輸文件的文章就介紹到這了,更多相關(guān)springboot阿里云OSS傳輸文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot使用阿里OSS實(shí)現(xiàn)文件云存儲(chǔ)的方法
- springboot操作阿里云OSS實(shí)現(xiàn)文件上傳,下載,刪除功能
- springBoot接入阿里云oss的實(shí)現(xiàn)步驟
- SpringBoot整合阿里云OSS對(duì)象存儲(chǔ)服務(wù)實(shí)現(xiàn)文件上傳
- Springboot集成阿里云OSS上傳文件系統(tǒng)教程
- SpringBoot集成七牛云OSS的示例詳解
- springBoot中的CORS跨域注解@CrossOrigin詳解
- springboot+vue實(shí)現(xiàn)oss文件存儲(chǔ)的示例代碼
相關(guān)文章
Spring RestTemplate使用方法示例總結(jié)
這篇文章主要介紹了Spring RestTemplate使用方法示例總結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-04-04關(guān)于Springboot的擴(kuò)展點(diǎn)DisposableBean的原理解析
這篇文章主要介紹了關(guān)于Springboot的擴(kuò)展點(diǎn)DisposableBean的原理解析,DisposableBean是一個(gè)接口,為Spring bean提供了一種釋放資源的方式 ,只有一個(gè)擴(kuò)展方法destroy(),需要的朋友可以參考下2023-05-05SpringBoot中屬性賦值操作的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot中屬性賦值操作的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Java多線(xiàn)程中的原子類(lèi)屬性說(shuō)明
這篇文章主要介紹了Java多線(xiàn)程中的原子類(lèi)屬性說(shuō)明,對(duì)多線(xiàn)程訪問(wèn)同一個(gè)變量,我們需要加鎖,而鎖是比較消耗性能的,JDk1.5之后,新增的原子操作類(lèi)提供了一種用法簡(jiǎn)單、性能高效、線(xiàn)程安全地更新一個(gè)變量的方式,需要的朋友可以參考下2023-10-10Logback日志基礎(chǔ)及自定義配置代碼實(shí)例
這篇文章主要介紹了Logback日志基礎(chǔ)及自定義配置代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09各種格式的編碼解碼工具類(lèi)分享(hex解碼 base64編碼)
這篇文章主要介紹了各種格式的編碼解碼工具類(lèi),集成Commons-Codec、Commons-Lang及JDK提供的編解碼方法2014-01-01