最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot工程如何使用阿里云OSS傳輸文件

 更新時(shí)間:2023年08月09日 14:30:40   作者:想要打 Acm 的小周同學(xué)呀  
阿里云對(duì)象存儲(chǔ)OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù),多種存儲(chǔ)類(lèi)型供選擇,全面優(yōu)化存儲(chǔ)成本,非常適合存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù),本文給大家介紹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();
}
}
//文件訪(fǎng)問(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springmvc ViewResolver設(shè)計(jì)實(shí)現(xiàn)過(guò)程解析

    Springmvc ViewResolver設(shè)計(jì)實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Springmvc ViewResolver設(shè)計(jì)實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 解決Mybatis在IDEA中找不到mapper映射文件的問(wèn)題

    解決Mybatis在IDEA中找不到mapper映射文件的問(wèn)題

    這篇文章主要介紹了解決Mybatis在IDEA中找不到mapper映射文件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • JDK?8與JDK?17深度對(duì)比以及開(kāi)發(fā)者能獲得什么

    JDK?8與JDK?17深度對(duì)比以及開(kāi)發(fā)者能獲得什么

    隨著技術(shù)的不斷發(fā)展,Java也在不斷地推出新版本以滿(mǎn)足開(kāi)發(fā)者的需求,下面這篇文章主要介紹了JDK?8與JDK?17深度對(duì)比以及開(kāi)發(fā)者能獲得什么的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-12-12
  • 如何解決Druid線(xiàn)程池Cause:java.sql.SQLRecoverableException:IO錯(cuò)誤:Socket read timed out的問(wèn)題

    如何解決Druid線(xiàn)程池Cause:java.sql.SQLRecoverableException:IO錯(cuò)誤:Sock

    這篇文章主要介紹了解決Druid線(xiàn)程池Cause:java.sql.SQLRecoverableException:IO錯(cuò)誤:Socket read timed out的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Spring Boot系列教程之7步集成RabbitMQ的方法

    Spring Boot系列教程之7步集成RabbitMQ的方法

    RabbitMQ 即一個(gè)消息隊(duì)列,主要是用來(lái)實(shí)現(xiàn)應(yīng)用程序的異步和解耦,同時(shí)也能起到消息緩沖,消息分發(fā)的作用。下面這篇文章主要給大家介紹了關(guān)于Spring Boot之7步集成RabbitMQ的相關(guān)資料,需要的朋友可以參考下
    2018-11-11
  • SpringBoot快速過(guò)濾出一次請(qǐng)求的所有日志的示例代碼

    SpringBoot快速過(guò)濾出一次請(qǐng)求的所有日志的示例代碼

    在現(xiàn)網(wǎng)出現(xiàn)故障時(shí),我們經(jīng)常需要獲取一次請(qǐng)求流程里的所有日志進(jìn)行定位,本文給大家介紹了SpringBoot如何快速過(guò)濾出一次請(qǐng)求的所有日志,文中有相關(guān)的代碼和示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • SpringBoot 創(chuàng)建及登錄、攔截器的實(shí)現(xiàn)

    SpringBoot 創(chuàng)建及登錄、攔截器的實(shí)現(xiàn)

    本文主要介紹了Java開(kāi)發(fā)中使用JDK 1.8和Spring Boot框架進(jìn)行Web應(yīng)用開(kāi)發(fā)時(shí),如何處理無(wú)狀態(tài)的HTTP協(xié)議以及如何實(shí)現(xiàn)用戶(hù)狀態(tài)的管理和維護(hù),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • 基于Java在netty中實(shí)現(xiàn)線(xiàn)程和CPU綁定

    基于Java在netty中實(shí)現(xiàn)線(xiàn)程和CPU綁定

    這篇文章主要介紹了基于Java在netty中實(shí)現(xiàn)線(xiàn)程和CPU綁定,文章圍繞主題的相關(guān)內(nèi)容展開(kāi)詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • java使用觀(guān)察者模式異步短信/郵箱提醒用戶(hù)群

    java使用觀(guān)察者模式異步短信/郵箱提醒用戶(hù)群

    這篇文章主要為大家詳細(xì)介紹了java使用觀(guān)察者模式異步短信和郵箱提醒用戶(hù)群,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Java中常用文本加解密工具類(lèi)總結(jié)

    Java中常用文本加解密工具類(lèi)總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Java中常用的幾種文本加解密工具類(lèi),包括AES對(duì)稱(chēng)加密、RSA非對(duì)稱(chēng)加密、哈希算法加密和Base64編解碼,需要的可以參考下
    2024-11-11

最新評(píng)論

克东县| 灵武市| 江阴市| 卓资县| 镇原县| 大新县| 汨罗市| 安泽县| 临泽县| 南岸区| 济源市| 信丰县| 和静县| 桓台县| 台中县| 霍林郭勒市| 枣庄市| 藁城市| 温宿县| 甘泉县| 民丰县| 湘乡市| 左权县| 集贤县| 梁平县| 黄石市| 柳州市| 陵水| 乾安县| 阳信县| 宜兴市| 达日县| 隆安县| 兴义市| 民勤县| 长子县| 博兴县| 永新县| 阿克苏市| 清丰县| 临桂县|