SpringBoot 整合 阿里雲OSS 儲存服務,快來免費搭建一個自己的圖床
Github 地址:https://github.com/Snailclimb/springboot-integration-examples(SpringBoot和其他常用技術的整合,可能是你遇到的講解最詳細的學習案例,力爭新手也能看懂並且能夠在看完之後獨立實踐。基於最新的 SpringBoot2.0+,是你學習SpringBoot 的最佳指南。) ,歡迎各位 Star。
筆主很早就開始用阿里雲OSS 儲存服務當做自己的圖床了。如果沒有用過阿里雲OSS 儲存服務或者不是很瞭解這個東西的可以看看官方文件,我這裡就不多做介紹了。阿里雲物件儲存 OSS文件,:
https://help.aliyun.com/product/31815.html?spm=a2c4g.11186623.6.540.4e401c62EyJK5T
本篇文章會介紹到 SpringBoot 整合阿里雲OSS 儲存服務實現檔案上傳下載以及簡單的檢視。其實今天將的應該算的上是一個簡單的小案例了,涉及到的知識點還算是比較多。
一 開發前的準備
1.1 前置知識
具有 Java 基礎以及SpringBoot 簡單基礎知識即可。
1.2 環境引數
- 開發工具:IDEA
- 基礎工具:Maven+JDK8
- 所用技術:SpringBoot+阿里雲OSS 儲存服務 Java 相關API
- SpringBoot版本:2.1.0
1.3 你能學到什麼
- SpringBoot 整合 阿里雲OSS 儲存服務並編寫相關工具類
- SpringBoot 整合 thymeleaf 並實現前後端傳值
- SpringBoot 從配置檔案讀取值並注入到類中
- 如何自己搭建一個圖床使用(通過前端選擇圖片,支援預覽,但不支援修改圖片)
1.4 建立工程
建立一個基本的 SpringBoot 專案,我這裡就不多說這方面問題了,具體可以參考下面這篇文章:
https://blog.csdn.net/qq_34337272/article/details/79563606
1.5 專案結構
1.6 配置 pom 檔案中的相關依賴
<dependencies>
< dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- 阿里雲OSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
二 配置阿里雲 OSS 儲存相關屬性
我在專案中使用的通過常量類來配置,不過你也可以使用 .properties 配置檔案來配置,然後@ConfigurationProperties
註解注入到類中。
2.1 通過常量類配置(本專案使用的方式)
AliyunOSSConfigConstant.java
/**
* @Auther: SnailClimb
* @Date: 2018/12/4 15:09
* @Description: 阿里雲OSS儲存的相關常量配置.我這裡通過常量類來配置的,當然你也可以通過.properties 配置檔案來配置,
* 然後利用 SpringBoot 的@ConfigurationProperties 註解來注入
*/
public class AliyunOSSConfigConstant {
//私有構造方法 禁止該類初始化
private AliyunOSSConfigConstant() {
}
//倉庫名稱
public static final String BUCKE_NAME = "my-blog-to-use";
//地域節點
public static final String END_POINT = "oss-cn-beijing.aliyuncs.com";
//AccessKey ID
public static final String AccessKey_ID = "你的AccessKeyID";
//Access Key Secret
public static final String AccessKey_Secret = "你的AccessKeySecret";
//倉庫中的某個資料夾
public static final String FILE_HOST = "test";
}
到阿里雲 OSS 控制檯:https://oss.console.aliyun.com/overview獲取上述相關資訊:
獲取 BUCKE_NAME 和 END_POINT:
獲取AccessKey ID和Access Key Secret第一步:
獲取AccessKey ID和Access Key Secret第二步:
2.2 通過.properties 配置
#OSS配置
aliyun.oss.bucketname=my-blog-to-use
aliyun.oss.endpoint=oss-cn-beijing.aliyuncs.com
#阿里雲主賬號AccessKey擁有所有API的訪問許可權,風險很高。建議建立並使用RAM賬號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM賬號。
aliyun.oss.keyid=你的AccessKeyID
aliyun.oss.keysecret=你的AccessKeySecret
aliyun.oss.filehost=test
然後新建一個類將屬性注入:
@Component
@PropertySource(value = "classpath:application-oss.properties")
@ConfigurationProperties(prefix = "aliyun.oss")
/**
* 阿里雲oss的配置類
*/
public class AliyunOSSConfig {
private String bucketname;
private String endpoint;
private String keyid;
private String keysecret;
private String filehost;
...
此處省略getter、setter以及 toString方法
}
三 工具類相關方法編寫
該工具類主要提供了三個方法:上傳檔案 upLoad(File file)
、通過檔名下載檔案downloadFile(String objectName, String localFileName)
、列出某個資料夾下的所有檔案listFile( )
。筆主比較懶,程式碼可能還比較簡陋,各位可以懂懂自己的腦子,參考阿里雲官方提供的相關文件來根據自己的需求來優化。Java API文件地址如下:
https://help.aliyun.com/document_detail/32008.html?spm=a2c4g.11186623.6.703.238374b4PsMzWf
/**
* @Author: SnailClimb
* @Date: 2018/12/1 16:56
* @Description: 阿里雲OSS服務相關工具類.
* Java API文件地址:https://help.aliyun.com/document_detail/32008.html?spm=a2c4g.11186623.6.703.238374b4PsMzWf
*/
@Component
public class AliyunOSSUtil {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(AliyunOSSUtil.class);
private static String FILE_URL;
private static String bucketName = AliyunOSSConfigConstant.BUCKE_NAME;
private static String endpoint = AliyunOSSConfigConstant.END_POINT;
private static String accessKeyId = AliyunOSSConfigConstant.AccessKey_ID;
private static String accessKeySecret = AliyunOSSConfigConstant.AccessKey_Secret;
private static String fileHost = AliyunOSSConfigConstant.FILE_HOST;
/**
* 上傳檔案。
*
* @param file 需要上傳的檔案路徑
* @return 如果上傳的檔案是圖片的話,會返回圖片的"URL",如果非圖片的話會返回"非圖片,不可預覽。檔案路徑為:+檔案路徑"
*/
public static String upLoad(File file) {
// 預設值為:true
boolean isImage = true;
// 判斷所要上傳的圖片是否是圖片,圖片可以預覽,其他檔案不提供通過URL預覽
try {
Image image = ImageIO.read(file);
isImage = image == null ? false : true;
} catch (IOException e) {
e.printStackTrace();
}
logger.info("------OSS檔案上傳開始--------" + file.getName());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = format.format(new Date());
// 判斷檔案
if (file == null) {
return null;
}
// 建立OSSClient例項。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
try {
// 判斷容器是否存在,不存在就建立
if (!ossClient.doesBucketExist(bucketName)) {
ossClient.createBucket(bucketName);
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
ossClient.createBucket(createBucketRequest);
}
// 設定檔案路徑和名稱
String fileUrl = fileHost + "/" + (dateStr + "/" + UUID.randomUUID().toString().replace("-", "") + "-" + file.getName());
if (isImage) {//如果是圖片,則圖片的URL為:....
FILE_URL = "https://" + bucketName + "." + endpoint + "/" + fileUrl;
} else {
FILE_URL = "非圖片,不可預覽。檔案路徑為:" + fileUrl;
}
// 上傳檔案
PutObjectResult result = ossClient.putObject(new PutObjectRequest(bucketName, fileUrl, file));
// 設定許可權(公開讀)
ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
if (result != null) {
logger.info("------OSS檔案上傳成功------" + fileUrl);
}
} catch (OSSException oe) {
logger.error(oe.getMessage());
} catch (ClientException ce) {
logger.error(ce.getErrorMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return FILE_URL;
}
/**
* 通過檔名下載檔案
*
* @param objectName 要下載的檔名
* @param localFileName 本地要建立的檔名
*/
public static void downloadFile(String objectName, String localFileName) {
// 建立OSSClient例項。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 下載OSS檔案到本地檔案。如果指定的本地檔案存在會覆蓋,不存在則新建。
ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(localFileName));
// 關閉OSSClient。
ossClient.shutdown();
}
/**
* 列舉 test 檔案下所有的檔案
*/
public static void listFile() {
// 建立OSSClient例項。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 構造ListObjectsRequest請求。
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
// 設定prefix引數來獲取fun目錄下的所有檔案。
listObjectsRequest.setPrefix("test/");
// 列出檔案。
ObjectListing listing = ossClient.listObjects(listObjectsRequest);
// 遍歷所有檔案。
System.out.println("Objects:");
for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
System.out.println(objectSummary.getKey());
}
// 遍歷所有commonPrefix。
System.out.println("CommonPrefixes:");
for (String commonPrefix : listing.getCommonPrefixes()) {
System.out.println(commonPrefix);
}
// 關閉OSSClient。
ossClient.shutdown();
}
}
四 Controller 層編寫相關測試方法
上傳檔案 upLoad(File file)
、通過檔名下載檔案downloadFile(String objectName, String localFileName)
、列出某個資料夾下的所有檔案listFile( )
這三個方法都在下面有對應的簡單測試。另外,還有一個方法uploadPicture(@RequestParam("file") MultipartFile file, Model model)
對應於我們等下要實現的圖床功能,該方法從前端接受到圖片之後上傳到阿里雲OSS儲存空間並返回上傳成功的圖片 URL 地址給前端。
注意將下面的相關路徑改成自己的,不然會報錯!!!
/**
* @Author: SnailClimb
* @Date: 2018/12/2 16:56
* @Description: 阿里雲OSS服務Controller
*/
@Controller
@RequestMapping("/oss")
public class AliyunOSSController {
private final org.slf4j.Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private AliyunOSSUtil aliyunOSSUtil;
/**
* 測試上傳檔案到阿里雲OSS儲存
*
* @return
*/
@RequestMapping("/testUpload")
@ResponseBody
public String testUpload() {
File file = new File("E:/Picture/test.jpg");
AliyunOSSUtil aliyunOSSUtil = new AliyunOSSUtil();
String url = aliyunOSSUtil.upLoad(file);
System.out.println(url);
return "success";
}
/**
* 通過檔名下載檔案
*/
@RequestMapping("/testDownload")
@ResponseBody
public String testDownload() {
AliyunOSSUtil aliyunOSSUtil = new AliyunOSSUtil();
aliyunOSSUtil.downloadFile(
"test/2018-12-04/e3f892c27f07462a864a43b8187d4562-rawpixel-600782-unsplash.jpg","E:/Picture/e3f892c27f07462a864a43b8187d4562-rawpixel-600782-unsplash.jpg");
return "success";
}
/**
* 列出某個資料夾下的所有檔案
*/
@RequestMapping("/testListFile")
@ResponseBody
public String testListFile() {
AliyunOSSUtil aliyunOSSUtil = new AliyunOSSUtil();
aliyunOSSUtil.listFile();
return "success";
}
/**
* 檔案上傳(供前端呼叫)
*/
@RequestMapping(value = "/uploadFile")
public String uploadPicture(@RequestParam("file") MultipartFile file, Model model) {
logger.info("檔案上傳");
String filename = file.getOriginalFilename();
System.out.println(filename);
try {
if (file != null) {
if (!"".equals(filename.trim())) {
File newFile = new File(filename);
FileOutputStream os = new FileOutputStream(newFile);
os.write(file.getBytes());
os.close();
file.transferTo(newFile);
// 上傳到OSS
String uploadUrl = aliyunOSSUtil.upLoad(newFile);
model.addAttribute("url",uploadUrl);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return "success";
}
}
五 啟動類
@SpringBootApplication
public class SpringbootOssApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootOssApplication.class, args);
}
}
六 上傳圖片相關前端頁面
注意引入jquery ,避免前端出錯。
index.html
JS 的內容主要是讓我們上傳的圖片可以預覽,就像我們在網站更換頭像的時候一樣。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>基於阿里雲OSS儲存的圖床</title>
<script th:src="@{/js/jquery-3.3.1.js}"></script>
<style>
* {
margin: 0;
padding: 0;
}
#submit {
margin-left: 15px;
}
.preview_box img {
width: 200px;
}
</style>
</head>
<body>
<form action="/oss/uploadFile" enctype="multipart/form-data" method="post">
<div class="form-group" id="group">
<input type="file" id="img_input" name="file" accept="image/*">
<label for="img_input" ></label>
</div>
<button type="submit" id="submit">上傳</button>
<!--預覽圖片-->
<div class="preview_box"></div>
</form>
<script type="text/javascript">
$("#img_input").on("change", function (e) {
var file = e.target.files[0]; //獲取圖片資源
// 只選擇圖片檔案
if (!file.type.match('image.*')) {
return false;
}
var reader = new FileReader();
reader.readAsDataURL(file); // 讀取檔案
// 渲染檔案
reader.onload = function (arg) {
var img = '<img class="preview" src="' + arg.target.result + '" alt="preview"/>';
$(".preview_box").empty().append(img);
}
});
</script>
</body>
</html>
success.html
通過 <span th:text="${url}"></span>
引用後端傳過來的值。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>上傳結果</title>
</head>
<body>
<h1>上傳成功!</h1>
圖片地址為:
相關推薦
SpringBoot 整合 阿里雲OSS 儲存服務,快來免費搭建一個自己的圖床
Github 地址:https://github.com/Snailclimb/springboot-integration-examples(SpringBoot和其他常用技術的整合,可能是你遇到的講解最詳細的學習案例,力爭新手也能看懂並且能夠在看完之後獨立實踐。基於最新的 S
SpringBoot整合阿里雲OSS儲存服務
摘要:OSS可用於圖片、音視訊、日誌等海量檔案的儲存。各種終端裝置、Web網站程式、移動應用可以直接向OSS寫入或讀取資料,非常方便。本篇文章介紹如何在java的SpringBoot專案中,整個使用OSS服務,spring 專案也可以參考。
主要步驟如下:
前提是開通了阿里雲OSS服務,然後
SpringBoot 整合 阿里雲OSS 儲存服務
參考:https://help.aliyun.com/product/31815.html?spm=a2c4g.11186623.6.540.4e401c62EyJK5T 1.4 建立工程 建立一個基本的 SpringBoot 專案,我這裡就不多說這方面問題了,具體可以參考下面這篇文章:
阿里雲物件儲存服務,OSS使用經驗總結,圖片儲存,分頁查詢
阿里雲OSS-使用經驗總結,儲存,賬號-許可權,分頁,縮圖,賬號切換最近專案中,需要使用雲端儲存,最後選擇了阿里雲-物件儲存服務OSS。總的來說,比較簡單,但是仍然遇到了幾個問題,需要總結下。1.OSS總的使用介紹 https://help.aliyun.com/docum
Laravel5.2 整合阿里雲--OSS物件儲存服務
<?php
namespace App\Service;
use JohnLui\AliyunOSS;
use Exception;
use DateTime;
class OSS {
/* 城市名稱:
*
* 經典網路下可選:杭州、上海、青島、北京、張家口、深圳
SpringBoot 2.0整合阿里雲OSS,實現動靜分離架構
前言
相信大部分開發者對下面這張架構圖並不陌生吧,現在很多網站/應用都採用了動靜分離的架構進行部署。博主的部落格也不例外,主機採用的是阿里雲的 ECS,使用 CDN 做靜態內容分發,不過靜態檔案還是儲存在 ECS,採用的是 Nginx 做動靜分離。今天我們來學習一下如何使用阿里雲 OSS 做動靜分離。
ossutil命令上傳檔案到阿里雲oss詳解,使用Shell指令碼實現資料的自動上傳下載Bucket物件儲存
安裝ossutil
yum -y install wget
wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/50452/cn_zh/1524643963683/ossutil64
mv
phalapi框架整合阿里雲oss雲端儲存
1:下載Ucloud檔案,存放在框架的Library目錄下,地址:
https://pan.baidu.com/s/1brddTXt 密碼:b4xx
2:框架的public下的 init.php檔案新增以下程式碼
/* 本地/雲 上傳 */
DI()-&
SpringBoot 整合阿里雲的OSS 上傳
#maven 匯入的包
<!--aliyunOSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId&
Laravel整合UEditor編輯器使用阿里雲OSS儲存(二)改造UEditor上傳OSS
部落格原文地址
目前為止UEditor以可以正常在Laravel中使用,接下來準備改造UEditor實現將檔案上傳至阿里雲OSS中
直接上乾貨,後面有實現原理分析有興趣可以看看,原理都一樣在其他框架和語言中都可以使用類似的方法進行對UEditor的改造使其支
OSS阿里雲物件儲存服務前端JS下載日誌檔案
function downurl(path) {
var client = new OSS({ region: '地區', accessKeyId: 'accessKeyId', accessKeySecret: 'accessKeySecret', bucket: '域
Spring Boot 整合阿里雲 OSS 進行檔案儲存
最近因為專案中需要儲存很多的圖片,不想儲存到伺服器上,因此就直接選用阿里雲的物件服務(`Object Storage Service`,簡稱 OSS)來進行儲存,本文將介紹 Spring Boot 整合 OSS 的一個完整過程。
那麼 OSS 是什麼呢?
簡而言之,OSS 是一種海量、安全、低成本、高可靠
阿里雲OSS儲存開發
OSSClient是與OSS服務互動的客戶端,SDK的OSS操作都是通過OSSClient完成的。
下面程式碼新建了一個OSSClient:
using Aliyun.OpenServices.OpenStorageService;
using System;
using System.Co
tp框架 阿里雲oss 上傳 ,刪除,判斷是不是存在
composer require aliyuncs/oss-sdk-php
配置檔案如下
'ALIOSS_CONFIG' => array(
'KEY_ID' => '',
'KEY_SECRET' => '',
Java專案整合阿里雲OSS上傳圖片
工具類:
import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream;
import org.slf4j.Lo
檔案上傳-阿里雲OSS-儲存檔案
JS上傳檔案到阿里雲OSS
OSS支援流式寫入和讀出。特別適合視訊等大檔案的邊寫邊讀業務場景。
注意在OSS的控制檯:跨域管理中設定允許的方法
<script>
var client = new OSS
tp5.1整合阿里雲OSS圖片上傳
首先利用tp5composer機制去下載一個阿里雲oss的sdk
composer require aliyuncs/oss-sdk-php
然後,去官方找些配置,在application同級目錄的config目錄裡面新建一個alioss.php的檔案,講配置資訊放進去向
tp5 整合阿里雲OSS圖片上傳
1.下載一個阿里雲oss的sdk 也可以到阿里雲 的OSS儲存裡面去下載
composer require aliyuncs/oss-sdk-php
2-去官方找些配置,在application同級目錄的config目錄裡面新建一個alioss.php的檔案,講配置資訊
SpringBoot基於阿里雲OSS上傳檔案
一:需求背景. Web系統開發中,檔案上傳是非常常見的功能,本來也沒啥好說的,就是通過IO流將檔案寫到另外一個地方,這個地方可以是 1. 專案的目錄中的某個資料夾. 2. 本地碟符的某個檔案下. 3. 雲服務OSS裡面.例如七牛雲,
阿里雲OSS儲存基於JAVA基本使用
https://blog.csdn.net/github_36086968/article/details/53113274本篇文章希望你先看完官方的API瞭解一下OSS基本語法和概念再來應該比較容易懂。這裡給出官方的OSS API:OSS APIOSS GitHub地址:點