springBoot接入阿里云oss的實(shí)現(xiàn)步驟
maven導(dǎo)入依賴(lài)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- 阿里云OSS -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
</dependencies>
定義阿里云上傳結(jié)果實(shí)體
package com.example.demo.entity;
import lombok.Data;
/**
* 阿里云上傳結(jié)果集
*
* @author wushuai
* @create 2021-01-25
*/
@Data
public class AliyunOssResult {
/**
* code:200成功
* code: 400失敗
*/
private int code;
/**
* 上傳成功的返回url
*/
private String url;
/**
* 提示信息
*/
private String msg;
}
yml設(shè)置阿里云oss參數(shù)
aliyunOss: endpoint: "http://oss-cn-shanghai.aliyuncs.com" accessKeyId: "xxxxxxx" accessKeySecret: "xxxxxxx" bucketName: "xxxxxx" urlPrefix: "http://bucketName.oss-cn-shanghai.aliyuncs.com/"
yml設(shè)置上傳文件大小限制
spring: servlet: multipart: max-file-size: 20MB max-request-size: 20MB
工具類(lèi)封裝
package com.example.demo.util;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.DeleteObjectsRequest;
import com.aliyun.oss.model.DeleteObjectsResult;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.example.demo.entity.AliyunOssResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import java.util.List;
@Component
public class AliyunOSSUtil {
@Value("${aliyunOss.endpoint}")
private String endpoint;
@Value("${aliyunOss.accessKeyId}")
private String accessKeyId;
@Value("${aliyunOss.accessKeySecret}")
private String accessKeySecret;
@Value("${aliyunOss.bucketName}")
private String bucketName;
@Value("${aliyunOss.urlPrefix}")
private String urlPrefix;
/**
* 上傳文件,以IO流方式
*
* @param inputStream 輸入流
* @param objectName 唯一objectName(在oss中的文件名字)
*/
public AliyunOssResult upload(InputStream inputStream, String objectName) {
AliyunOssResult aliyunOssResult = new AliyunOssResult();
try {
// 創(chuàng)建OSSClient實(shí)例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上傳內(nèi)容到指定的存儲(chǔ)空間(bucketName)并保存為指定的文件名稱(chēng)(objectName)。
ossClient.putObject(bucketName, objectName, inputStream);
// 關(guān)閉OSSClient。
ossClient.shutdown();
aliyunOssResult.setCode(200);
aliyunOssResult.setUrl(urlPrefix+objectName);
aliyunOssResult.setMsg("上傳成功");
} catch (Exception e) {
e.printStackTrace();
aliyunOssResult.setCode(400);
aliyunOssResult.setMsg("上傳失敗");
}
return aliyunOssResult;
}
/**
* 刪除OSS中的單個(gè)文件
*
* @param objectName 唯一objectName(在oss中的文件名字)
*/
public void delete(String objectName) {
try {
// 創(chuàng)建OSSClient實(shí)例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 刪除文件。
ossClient.deleteObject(bucketName, objectName);
// 關(guān)閉OSSClient。
ossClient.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 批量刪除OSS中的文件
*
* @param objectNames oss中文件名list
*/
public void delete(List<String> objectNames) {
try {
// 創(chuàng)建OSSClient實(shí)例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 批量刪除文件。
DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(objectNames));
List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
// 關(guān)閉OSSClient。
ossClient.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 獲取文件臨時(shí)url
*
* @param objectName oss中的文件名
* @param effectiveTime 有效時(shí)間(ms)
*/
public String getUrl(String objectName,long effectiveTime){
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 設(shè)置URL過(guò)期時(shí)間
Date expiration = new Date(new Date().getTime() + effectiveTime);
GeneratePresignedUrlRequest generatePresignedUrlRequest ;
generatePresignedUrlRequest =new GeneratePresignedUrlRequest(bucketName, objectName);
generatePresignedUrlRequest.setExpiration(expiration);
URL url = ossClient.generatePresignedUrl(generatePresignedUrlRequest);
return url.toString();
}
}
controller接收調(diào)用
package com.example.demo.controller;
import com.example.demo.util.AliyunOSSUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;
@RestController
@RequestMapping("/file")
public class FileController {
@Autowired
private AliyunOSSUtil aliyunOSSUtil;
@RequestMapping(value = "/uploadFile")
public @ResponseBody
Object uploadFile(@RequestParam(value = "file", required = false) MultipartFile file,
String strPath) throws IOException {
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
String objectName = strPath+"/"+ UUID.randomUUID().toString()+"."+suffix;
return aliyunOSSUtil.upload(file.getInputStream(),objectName);
}
}
postman測(cè)試


到此這篇關(guān)于springBoot接入阿里云oss的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)springBoot接入阿里云oss內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot使用阿里OSS實(shí)現(xiàn)文件云存儲(chǔ)的方法
- springboot操作阿里云OSS實(shí)現(xiàn)文件上傳,下載,刪除功能
- SpringBoot整合阿里云OSS對(duì)象存儲(chǔ)服務(wù)實(shí)現(xiàn)文件上傳
- Springboot集成阿里云OSS上傳文件系統(tǒng)教程
- springboot工程如何使用阿里云OSS傳輸文件
- SpringBoot集成七牛云OSS的示例詳解
- springBoot中的CORS跨域注解@CrossOrigin詳解
- springboot+vue實(shí)現(xiàn)oss文件存儲(chǔ)的示例代碼
相關(guān)文章
Python動(dòng)態(tài)類(lèi)型實(shí)現(xiàn)原理及過(guò)程解析
這篇文章主要介紹了Python動(dòng)態(tài)類(lèi)型實(shí)現(xiàn)原理及過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
springboot使用filter獲取自定義請(qǐng)求頭的實(shí)現(xiàn)代碼
這篇文章主要介紹了springboot使用filter獲取自定義請(qǐng)求頭的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
SpringCloud Config配置中心原理以及環(huán)境切換方式
這篇文章主要介紹了SpringCloud Config配置中心原理以及環(huán)境切換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解
這篇文章主要為大家介紹了java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
深入分析RabbitMQ中死信隊(duì)列與死信交換機(jī)
這篇文章主要介紹了RabbitMQ中死信隊(duì)列與死信交換機(jī),死信隊(duì)列就是一個(gè)普通的交換機(jī),有些隊(duì)列的消息成為死信后,一般情況下會(huì)被RabbitMQ清理,感興趣想要詳細(xì)了解可以參考下文2023-05-05
使用Idea maven創(chuàng)建Spring項(xiàng)目過(guò)程圖解
這篇文章主要介紹了使用Idea maven創(chuàng)建Spring項(xiàng)目過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
Maven的國(guó)內(nèi)鏡像(快速解決jar下載過(guò)慢的問(wèn)題)
下面小編就為大家?guī)?lái)一篇Maven的國(guó)內(nèi)鏡像(快速解決jar下載過(guò)慢的問(wèn)題)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
JPA實(shí)現(xiàn)多條件分頁(yè)查詢(xún)
這篇文章主要介紹了JPA實(shí)現(xiàn)多條件分頁(yè)查詢(xún)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
開(kāi)發(fā)者必讀:揭秘Python與Java的性能較量
本文將探討這兩種流行的編程語(yǔ)言之間的性能差異,無(wú)論你是剛剛?cè)腴T(mén)編程還是已經(jīng)有一定經(jīng)驗(yàn),這個(gè)指南都將幫助你了解Python和Java在執(zhí)行速度、內(nèi)存管理以及擴(kuò)展性方面的不同,通過(guò)比較這兩種語(yǔ)言的特點(diǎn)和優(yōu)勢(shì),你將能夠更好地選擇適合自己項(xiàng)目需求的編程語(yǔ)言,讓我們開(kāi)始吧!2023-12-12

