阿里雲OSS工具類
【前言】
我們上家公司的儲存系統用的是FastDFS(智慧一代雲平臺(二十八):對前後端分離和FastDFS的使用的再理解);現在在職的公司用的是阿里雲的OSS(OSS的官方文件),在工作的時候整理一個上傳OSS檔案的工具類,現在與大家分享一下。
【工具類】
1、工具類的程式碼:
-
package zhanghan.oss.utils;
-
-
import com.aliyun.oss.ClientException;
-
import com.aliyun.oss.OSSClient;
-
import com.aliyun.oss.OSSException;
-
import
com.aliyun.oss.model.ObjectMetadata;
-
import com.aliyun.oss.model.PutObjectResult;
-
import com.fasterxml.jackson.annotation.JsonValue;
-
import
org.apache.commons.io.FilenameUtils;
-
import org.apache.commons.lang3.time.DateUtils;
-
import org.springframework.util.StringUtils;
-
import org.springframework.web.multipart.MultipartFile;
-
import zhanghan.oss.exception.OSSCreateBucketRuntimeException;
-
import zhanghan.oss.exception.OSSGeneratePresignedUrlRuntimeException;
-
import zhanghan.oss.exception.OssPutObjectRuntimeException;
-
import java.io.InputStream;
-
import java.net.URL;
-
import java.util.Date;
-
import java.util.UUID;
-
-
/**
-
* OSS上傳工具類-張晗-2017/10/10
-
*/
-
public
class OSSUtil {
-
private
volatile
static OSSClient instance;
-
-
private OSSUtil() {
-
}
-
-
/**
-
* 單例
-
* @return OSS工具類例項
-
*/
-
private static OSSClient getOSSClient() {
-
if (instance ==
null) {
-
synchronized (OSSUtil.class) {
-
if (instance ==
null) {
-
instance =
new OSSClient(OSS_END_POINT, OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET);
-
}
-
}
-
}
-
return instance;
-
}
-
-
//定義日誌
-
private
final
static LogUtils logger = LogUtils.getLogger(OSSUtil.class);
-
//OSS 的地址
-
private
final
static String OSS_END_POINT =
"http://oss-cn-qingdao.aliyuncs.com";
-
//OSS 的key值
-
private
final
static String OSS_ACCESS_KEY_ID =
"OSSKEY";
-
//OSS 的secret值
-
private
final
static String OSS_ACCESS_KEY_SECRET =
"OSSSECRET";
-
//OSS 的bucket名字
-
private
final
static String OSS_BUCKET_NAME =
"zhanghan-test";
-
//設定URL過期時間為10年
-
private
final
static Date OSS_URL_EXPIRATION = DateUtils.addDays(
new Date(),
365 *
10);
-
-
//檔案路徑的列舉
-
public
enum FileDirType {
-
ZHANGHAN_TEST(
"test");
-
private String dir;
-
-
FileDirType(String dir) {
-
this.dir = dir;
-
}
-
-
@JsonValue
-
public String getDir() {
-
return dir;
-
}
-
}
-
-
/**
-
* 上傳檔案---去除URL中的?後的時間戳
-
* @param file 檔案
-
* @param fileDir 上傳到OSS上檔案的路徑
-
* @return 檔案的訪問地址
-
*/
-
public static String upload(MultipartFile file, FileDirType fileDir) {
-
OSSUtil.createBucket();
-
String fileName = OSSUtil.uploadFile(file, fileDir);
-
String fileOssURL = OSSUtil.getImgUrl(fileName, fileDir);
-
int firstChar = fileOssURL.indexOf(
"?");
-
if (firstChar >
0) {
-
fileOssURL = fileOssURL.substring(
0, firstChar);
-
}
-
return fileOssURL;
-
}
-
-
-
/**
-
* 當Bucket不存在時建立Bucket
-
*
-
* @throws OSSException 異常
-
* @throws ClientException Bucket命名規則:
-
* 1.只能包含小寫字母、數字和短橫線,
-
* 2.必須以小寫字母和數字開頭和結尾
-
* 3.長度在3-63之間
-
*/
-
private static void createBucket() {
-
try {
-
if (!OSSUtil.getOSSClient().doesBucketExist(OSS_BUCKET_NAME)) {
//判斷是否存在該Bucket,不存在時再重新建立
-
OSSUtil.getOSSClient().createBucket(OSS_BUCKET_NAME);
-
}
-
}
catch (Exception e) {
-
logger.error(
"{}",
"建立Bucket失敗,請核對Bucket名稱(規則:只能包含小寫字母、數字和短橫線,必須以小寫字母和數字開頭和結尾,長度在3-63之間)");
-
throw
new OSSCreateBucketRuntimeException(
"建立Bucket失敗,請核對Bucket名稱(規則:只能包含小寫字母、數字和短橫線,必須以小寫字母和數字開頭和結尾,長度在3-63之間)");
-
}
-
}
-
-
-
/**
-
* 上傳到OSS伺服器 如果同名檔案會覆蓋伺服器上的
-
* @param file 檔案
-
* @param fileDir 上傳到OSS上檔案的路徑
-
* @return 檔案的訪問地址
-
*/
-
private static String uploadFile(MultipartFile file, FileDirType fileDir) {
-
String fileName = String.format(
-
"%s.%s",
-
UUID.randomUUID().toString(),
-
FilenameUtils.getExtension(file.getOriginalFilename()));
-
try (InputStream inputStream = file.getInputStream()) {
-
//建立上傳Object的Metadata
-
ObjectMetadata objectMetadata =
new ObjectMetadata();
-
objectMetadata.setContentLength(inputStream.available());
-
objectMetadata.setCacheControl(
"no-cache");
-
objectMetadata.setHeader(
"Pragma",
"no-cache");
-
objectMetadata.setContentType(getContentType(FilenameUtils.getExtension(
"." + file.getOriginalFilename())));
-
objectMetadata.setContentDisposition(
"inline;filename=" + fileName);
-
//上傳檔案
-
PutObjectResult putResult = OSSUtil.getOSSClient().putObject(OSS_BUCKET_NAME, fileDir.getDir() + fileName, inputStream, objectMetadata);
-
return fileName;
-
}
catch (Exception e) {
-
logger.error(
"{}",
"上傳檔案失敗");
-
throw
new OssPutObjectRuntimeException(
"上傳檔案失敗");
-
}
-
}
-
-
-
/**
-
* 獲得檔案路徑
-
* @param fileUrl 檔案的URL
-
* @param fileDir 檔案在OSS上的路徑
-
* @return 檔案的路徑
-
*/
-
private static String getImgUrl(String fileUrl, FileDirType fileDir) {
-
if (StringUtils.isEmpty(fileUrl)) {
-
logger.error(
"{}",
"檔案地址為空");
-
throw
new RuntimeException(
"檔案地址為空");
-
}
-
String[] split = fileUrl.split(
"/");
-
-
//獲取oss圖片URL失敗
-
URL url = OSSUtil.getOSSClient().generatePresignedUrl(OSS_BUCKET_NAME, fileDir.getDir() + split[split.length -
1], OSS_URL_EXPIRATION);
-
if (url ==
null) {
-
logger.error(
"{}",
"獲取oss檔案URL失敗");
-
throw
new OSSGeneratePresignedUrlRuntimeException(
"獲取oss檔案URL失敗");
-
}
-
return url.toString();
-
}
-
-
/**
-
* 判斷OSS服務檔案上傳時檔案的contentType
-
*
-
* @param FilenameExtension 檔案字尾
-
* @return 字尾
-
*/
-
private static String getContentType(String FilenameExtension) {
-
if (FilenameExtension.equalsIgnoreCase(
"bmp")) {
-
return
"image/bmp";
-
}
-
if (FilenameExtension.equalsIgnoreCase(
"gif")) {
-
return
"image/gif";
-
}
-
if (FilenameExtension.equalsIgnoreCase(
"jpeg") ||
-
FilenameExtension.equalsIgnoreCase(
"jpg") ||
-
FilenameExtension.equalsIgnoreCase(
"png")) {
-
return
"image/jpeg";
-
}
-
if (FilenameExtension.equalsIgnoreCase(
"html")) {
-
return
"text/html";
-
}
-
if (FilenameExtension.equalsIgnoreCase(
"txt")) {
-
return
"text/plain";
-
}
-
if (FilenameExtension.equalsIgnoreCase(
"vsd")) {
-
return
"application/vnd.visio";
-
}
-
if (FilenameExtension.equalsIgnoreCase(
"pptx") ||
-
FilenameExtension.equalsIgnoreCase(
"ppt")) {
-
return
"application/vnd.ms-powerpoint";
-
}
-
if (FilenameExtension.equalsIgnoreCase(
"docx") ||
-
FilenameExtension.equalsIgnoreCase(
"doc")) {
-
return
"application/msword";
-
}
-
if (FilenameExtension.equalsIgnoreCase(
"xml")) {
-
return
"text/xml";
-
}
-
return
"image/jpeg";
-
}
-
}
2、呼叫工具類的程式碼:
-
/**
-
* 上傳檔案測試
-
* @param multipartFile 待上傳的檔案
-
相關推薦
阿里雲OSS工具類
【前言】
我們上家公司的儲存系統用的是FastDFS(智慧一代雲平臺(二十八):對前後端分離和FastDFS的使用的再理解);現在在職的公司用的是阿里雲的OSS(OSS的官方文件),在工作的時候整理一個上傳OSS檔案的工具類,現在與大家分享一下。
阿裏雲OSS工具類
src lsi uuid csdn pack sso wrong ews 商業模式
【前言】
我們上家公司的存儲系統用的是FastDFS(智能一代雲平臺(二十八):對前後端分離和FastDFS的使用的再理解);現在在職的公司
阿里雲OSS上傳檔案工具類
/** * * * 阿里雲OSS上傳檔案工具 * * 支援普通檔案上傳,限制大小檔案上傳,限制大小圖片上傳 * * @version1.0 */public class AliyunOssUtil {private Logger logger =
一個小工具,利用php把指定目錄檔案遞迴上傳到阿里雲OSS
cp2oss(_GALLERY_DIR);
function cp2oss($directory) {
$mydir = dir($directory);
while($file = $mydir->read())
{
if(is_dir("$
一招教你寫部落格,Typora+PicGo+阿里雲oss,最好用的Markdown+最好用的圖床工具!
### 部落格
> ### 寫部落格的好處
**1.使自己變得更善於觀察**。一旦你養成了記部落格的習慣,與此同時你也賦予了一個更好的機會給自己,讓自己去更細緻地觀察生活。一個人的生活經歷本就是價值連城的,從中學習到的知識,教訓更是異常珍貴。放眼生活中那些正面的、負面的資訊,讓自己靜靜地去思考,
SpringBoot整合阿里雲OSS儲存服務
摘要:OSS可用於圖片、音視訊、日誌等海量檔案的儲存。各種終端裝置、Web網站程式、移動應用可以直接向OSS寫入或讀取資料,非常方便。本篇文章介紹如何在java的SpringBoot專案中,整個使用OSS服務,spring 專案也可以參考。
主要步驟如下:
前提是開通了阿里雲OSS服務,然後
阿里雲OSS儲存開發
OSSClient是與OSS服務互動的客戶端,SDK的OSS操作都是通過OSSClient完成的。
下面程式碼新建了一個OSSClient:
using Aliyun.OpenServices.OpenStorageService;
using System;
using System.Co
阿里雲oss js前端獲取簽名直傳檔案
1. 原來的官方文件是先選擇檔案,再點選上傳按鈕,上傳檔案,我這裡是選擇完檔案,就上傳,這裡主要是在FilesAdded這個裡面新增完檔案,立刻初始化一次set_upload_param(uploader, '', true); 就能選擇完就上傳了.
2.這個只是個簡單的圖片上傳,沒有
從群輝儲存裝置上傳圖片到阿里雲OSS方案
一,需求
1,大量圖片需要做異地災備,大約有上百萬張圖片,而且還會往上增加,每張圖片大小在5M-10M左右;
2,環境說明:伺服器是群輝儲存,作業系統功能受限制,跟centos系統使用有諸多不同;
二,實施方案
1,設定crontab任務
#backup data to Al
微信小程式 上傳圖片至阿里雲OSS(支援多圖片上傳)
我們先講下為什麼要把圖片檔案上傳到雲伺服器呢, 有什麼好處呢?
1、能減輕我們自己伺服器的頻寬
如果一個程式裡有多處地方用到使用者上傳圖片等功能的話,建議還是放到阿里雲或者千牛雲等其他平臺上來儲存我們的圖片,可以給公司的伺服器減少很多壓力,磁碟儲存也就不會太大
2、提升使用者體驗感
php/PHP 阿里雲OSS檔案上傳
一、封裝的upload方法能看懂就看 看不懂直接使用
1.支援base64和普通表單等檔案上傳方式(會自動判斷方式)
2.呼叫時候只需要傳入一個要上傳到阿
tp框架 阿里雲oss 上傳 ,刪除,判斷是不是存在
composer require aliyuncs/oss-sdk-php
配置檔案如下
'ALIOSS_CONFIG' => array(
'KEY_ID' => '',
'KEY_SECRET' => '',
SpringBoot + 阿里雲OSS檔案上傳服務
分享一個關於檔案上傳服務的專案
pom.xml檔案需要新增的依賴
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliy
阿里雲OSS上儲存了什麼東西?
阿里雲物件儲存服務(Object Storage Service,簡稱OSS)為您提供基於網路的資料存取服務。使用OSS,您可以通過網路隨時儲存和呼叫包括文字、圖片、音訊和視訊等在內的各種非結構化資料檔案。 阿里雲OSS將資料檔案以物件(object)的形式上傳到儲存空間(bucket)中。
詳解wordpress如何把檔案儲存到阿里雲OSS上!
自己搞了一個Wordpress的部落格,裝完之後一直晾著沒管,最近閒來開荒。為了減小伺服器的頻寬、儲存、CUP的壓力,決定把部落格中的所有檔案都儲存到阿里雲OSS上面。
關於這個問題,自己去呼叫OSS的SDK然後再去修改wordpress這種方式肯定是費時又費力,哪怕是你閒得蛋疼也不會這麼幹,何況是忙到蛋疼
阿里雲 oss 檔案下載進度顯示
思路是:第一獲取要下載檔案的大小,設為X,第二通過多執行緒監測已下載檔案的大小,設為Y,Y/x就是下載的進度。關鍵程式碼如下
//獲取要下載的object的metadata ObjectMeta
jFianl配置阿里雲OSS教程
1、第一步購買什麼的就不說啦
2、建立Bucket,在自己選擇的節點上
3、在自己建立的Bucket下建立資料夾,oss這裡演示的是上傳圖片建立test資料夾作為演示
4、開始配置檔案,先在resource下建立一個oss配置檔案需要的引數endpoint、accessKeyId、se
阿里雲OSS
1.先將圖片上傳到uploads中,獲取圖片的savename
2.將圖片上傳到oss上,addossimg($ossPath, $path)第一個引數為oss存放圖片的路徑,第二個引數為本地的路徑
3.返回圖片的資訊
程式碼如下:
控制器中的方法為:
/*修改
SpringBoot 整合 阿里雲OSS 儲存服務,快來免費搭建一個自己的圖床
Github 地址:https://github.com/Snailclimb/springboot-integration-examples(SpringBoot和其他常用技術的整合,可能是你遇到的講解最詳細的學習案例,力爭新手也能看懂並且能夠在看完之後獨立實踐。基於最新的 S
Java專案整合阿里雲OSS上傳圖片
工具類:
import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream;
import org.slf4j.Lo