1. 程式人生 > >java操作阿里雲的物件儲存OSS

java操作阿里雲的物件儲存OSS

以下部落格簡單介紹連線阿里雲的OSS,新建Bucket,刪除Bucket,向阿里雲的OSS儲存中儲存單個檔案,獲取單個檔案,刪除單個檔案等功能。

以下為pom依賴:

		<!-- aliyun oss -->
		<dependency>
			<groupId>com.aliyun.oss</groupId>
			<artifactId>aliyun-sdk-oss</artifactId>
			<version>2.2.1</version>
		</dependency>

下載地址:
Aliyun OSS SDK For Java » 2.2.1

下邊為oss的配置檔案oss.properties,也可以直接寫入程式碼:

endpoint=oss-cn-beijing.aliyuncs.com
accessKeyId=您的key
accessKeySecret=您的secret

注endpoint為:OSS外網域名或OSS內網域名去掉您的Bucket.後

OSS的操作程式碼:

package my.demo.java.z.aliyun.oss;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.Bucket;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;

public class OSSUnit {
	
	//log
	private static final Logger LOG = LoggerFactory.getLogger(OSSUnit.class);
	
	//阿里雲API的內或外網域名
	private static String ENDPOINT;
	//阿里雲API的金鑰Access Key ID
	private static String ACCESS_KEY_ID;
	//阿里雲API的金鑰Access Key Secret
	private static String ACCESS_KEY_SECRET;
	
	//init static datas
	static{
		ResourceBundle bundle = PropertyResourceBundle.getBundle("properties.oss");
		ENDPOINT = bundle.containsKey("endpoint") == false ? "" : bundle.getString("endpoint");
		ACCESS_KEY_ID = bundle.containsKey("accessKeyId") == false? "" : bundle.getString("accessKeyId");
		ACCESS_KEY_SECRET = bundle.containsKey("accessKeySecret") == false ? "" : bundle.getString("accessKeySecret");
	}
	
	/**
	 * 獲取阿里雲OSS客戶端物件
	 * */
	public static final OSSClient getOSSClient(){
		return new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET);
	}
	
	/**
	 * 新建Bucket  --Bucket許可權:私有
	 * @param bucketName bucket名稱
	 * @return true 新建Bucket成功
	 * */
	public static final boolean createBucket(OSSClient client, String bucketName){
		Bucket bucket = client.createBucket(bucketName); 
		return bucketName.equals(bucket.getName());
	}
	
	/**
	 * 刪除Bucket 
	 * @param bucketName bucket名稱
	 * */
	public static final void deleteBucket(OSSClient client, String bucketName){
		client.deleteBucket(bucketName); 
		LOG.info("刪除" + bucketName + "Bucket成功");
	}
	
	/**
	 * 向阿里雲的OSS儲存中儲存檔案  --file也可以用InputStream替代
	 * @param client OSS客戶端
	 * @param file 上傳檔案
	 * @param bucketName bucket名稱
	 * @param diskName 上傳檔案的目錄  --bucket下檔案的路徑
	 * @return String 唯一MD5數字簽名
	 * */
	public static final String uploadObject2OSS(OSSClient client, File file, String bucketName, String diskName) {
		String resultStr = null;
		try {
			InputStream is = new FileInputStream(file);
			String fileName = file.getName();
			Long fileSize = file.length();
			//建立上傳Object的Metadata
			ObjectMetadata metadata = new ObjectMetadata();
			metadata.setContentLength(is.available());
			metadata.setCacheControl("no-cache");
			metadata.setHeader("Pragma", "no-cache");
			metadata.setContentEncoding("utf-8");
			metadata.setContentType(getContentType(fileName));
			metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");
			//上傳檔案 
			PutObjectResult putResult = client.putObject(bucketName, diskName + fileName, is, metadata);
			//解析結果
			resultStr = putResult.getETag();
		} catch (Exception e) {
			LOG.error("上傳阿里雲OSS伺服器異常." + e.getMessage(), e);
		}
		return resultStr;
	}
	
    /** 
     * 根據key獲取OSS伺服器上的檔案輸入流
 	 * @param client OSS客戶端
 	 * @param bucketName bucket名稱
 	 * @param diskName 檔案路徑
 	 * @param key Bucket下的檔案的路徑名+檔名
     */  
     public static final InputStream getOSS2InputStream(OSSClient client, String bucketName, String diskName, String key){ 
		OSSObject ossObj = client.getObject(bucketName, diskName + key);
		return ossObj.getObjectContent();	
     }  
	
   /** 
    * 根據key刪除OSS伺服器上的檔案 
  	* @param client OSS客戶端
  	* @param bucketName bucket名稱
  	* @param diskName 檔案路徑
  	* @param key Bucket下的檔案的路徑名+檔名
    */  
	  public static void deleteFile(OSSClient client, String bucketName, String diskName, String key){  
	  	client.deleteObject(bucketName, diskName + key); 
	  	LOG.info("刪除" + bucketName + "下的檔案" + diskName + key + "成功");
	  }  
     
    /** 
     * 通過檔名判斷並獲取OSS服務檔案上傳時檔案的contentType 
     * @param fileName 檔名
     * @return 檔案的contentType   
     */  
     public static final String getContentType(String fileName){  
    	String fileExtension = fileName.substring(fileName.lastIndexOf("."));
    	if("bmp".equalsIgnoreCase(fileExtension)) return "image/bmp";
    	if("gif".equalsIgnoreCase(fileExtension)) return "image/gif";
    	if("jpeg".equalsIgnoreCase(fileExtension) || "jpg".equalsIgnoreCase(fileExtension)  || "png".equalsIgnoreCase(fileExtension) ) return "image/jpeg";
    	if("html".equalsIgnoreCase(fileExtension)) return "text/html";
    	if("txt".equalsIgnoreCase(fileExtension)) return "text/plain";
    	if("vsd".equalsIgnoreCase(fileExtension)) return "application/vnd.visio";
    	if("ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension)) return "application/vnd.ms-powerpoint";
    	if("doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension)) return "application/msword";
    	if("xml".equalsIgnoreCase(fileExtension)) return "text/xml";
        return "text/html";  
     }  

}

程式碼對應測試程式碼junit如下:

package my.demo.java.z.aliyun.oss;

import static org.junit.Assert.assertEquals;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.aliyun.oss.OSSClient;

public class OSSUnitTest {
	
	//log
	private static final Logger LOG = LoggerFactory.getLogger(OSSUnitTest.class);
	
	private OSSUnit ossunit = null;
	private OSSClient client = null;
	private String bucketName = "oss-test-my";
	@Before
	public void initUnit(){
		ossunit = new OSSUnit();
		client = OSSUnit.getOSSClient();
	}

	@Test
	public void testCreateBucket() {
		String bucketName = "oss-test-my";
		//建立bucket
		assertEquals(true, OSSUnit.createBucket(client, bucketName));
	}
	
	@Test
	public void testDeleteBucket(){
		String bucketName = "oss-test-my";
		//刪除bucket
		OSSUnit.deleteBucket(client, bucketName);
		//console log :刪除oss-test-myBucket成功
	}
	
	@Test
	public void testUploadObject2OSS(){
		//上傳檔案
		String flilePathName = "C:/Users/Tony_tian/Desktop/csdnimg/preossimg.jpg";
		File file = new File(flilePathName);
		String diskName = "datas/image/";
		String md5key = OSSUnit.uploadObject2OSS(client, file, bucketName, diskName);
		LOG.info("上傳後的檔案MD5數字唯一簽名:" + md5key);  //上傳後的檔案MD5數字唯一簽名:A30B046A34EB326C4A3BBD784333B017
	}
	
	@Test
	public void testGetOSS2InputStream(){
		//獲取檔案
		try {
			BufferedInputStream bis = new BufferedInputStream(OSSUnit.getOSS2InputStream(client, bucketName, "datas/image/", "preossimg.jpg"));
			String resfile = "C:/Users/Tony_tian/Desktop/csdnimg/preossimg_res.jpg";
			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(resfile)));
			int itemp = 0;
			while((itemp = bis.read()) != -1){
				bos.write(itemp);
			}
			LOG.info("檔案獲取成功"); //console log :檔案獲取成功
			bis.close();
			bos.close();
		} catch (Exception e) {
			LOG.error("從OSS獲取檔案失敗:" + e.getMessage(), e);
		}
	}
	
	@Test
	public void testDeleteFile(){
		//注:資料夾下只有一個檔案,則資料夾也會一起刪除;如果多個檔案,只會刪除指定檔名的檔案
		//刪除檔案
		OSSUnit.deleteFile(client, bucketName, "datas/image/", "preossimg.jpg");
		//console log : 刪除oss-test-my下的檔案datas/image/preossimg.jpg成功
	}

}
部分效果圖:

新建Bucket(Bucket許可權:私有,公開需手動設定)前後和刪除Bucket:




上傳檔案前後即刪除檔案:

注:資料夾下只有一個檔案,則資料夾也會一起刪除;如果多個檔案,只會刪除指定檔名的檔案




上邊記錄為私有檔案的獲取,如果要獲取“Bucket許可權:公共讀”的就很簡單了:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>Aliyun-OSS</title>
		<meta name="keywords" content="Aliyun-OSS"/>
		<meta name="description" content="Aliyun-OSS" />
	<!--	<link rel="stylesheet" href="${serverprc }/static/css/common.css" />
		<script type="text/javascript" src="${serverprc }/static/js/common.js" charset="utf-8"></script> -->
	</head>
	<body>
		<div>
			Bucket許可權:公共讀的圖片:<img src="http://tsxs-datas.oss-cn-beijing.aliyuncs.com/image/public/tsxs_title_logo.ico"/>
		</div>
	</body>
</html>
開啟效果:


相關推薦

阿里-物件儲存OSS

文件地址 https://help.aliyun.com/document_detail/32099.html?spm=a2c4g.11186623.6.766.74cdc839H0RSId 安裝(此處為composer安裝) 1、PHP 5.3+ 2、擴

阿里物件儲存OSS使用記錄: 如何把oss中Bucket的檔案URL連線設定成永久有效

一、OSS本身的許可權控制 1.許可權型別 Bucket目前有三種訪問許可權:public-read-write,public-read和private; 2.許可權設定與獲取 通過控制檯設定Bucket級別和object級別的操作; 控制檯: Bucket:

阿里物件儲存OSS之通過URL形式進行圖片處理

文章目錄 1. 什麼是OSS 2. OSS圖片服務 3. 圖片處理訪問規則 4. 通過URL的形式 5. 多個action之間組合形式 5.1 示例 5.2 圖片旋轉 5.3 圖片裁剪

阿里物件儲存OSS--實現隨時隨地上傳檔案到阿里

需求背景:消費者多批次回饋我司生產的車載智慧後視鏡出現宕機、連不上伺服器等問題,因產品已經出到全國各地不方便去取異常log,也不可能要求消費者把log傳給我們分析。 需求目標:公司內部實現遠端後臺上傳問題機型的log。 必備條件:後視鏡有SIM卡且能夠聯網(

乾貨 | 基於Go SDK操作京東物件儲存OSS的入門指南

    前言 本文介紹如何使用Go語言對京東雲物件儲存OSS進行基本的操作,幫助客戶快速通過G

java操作阿里物件儲存OSS

以下部落格簡單介紹連線阿里雲的OSS,新建Bucket,刪除Bucket,向阿里雲的OSS儲存中儲存單個檔案,獲取單個檔案,刪除單個檔案等功能。 以下為pom依賴: <!-- aliyun oss --> <dependency>

react使用阿里物件儲存,ali-oss, antd upload to ali-oss

最近寫阿里雲圖片上傳,碰到一些小問題,在此總結一下. 專案環境: create-react-app antd node6.1.0 看了阿里雲oss物件儲存sdk 直接採用node 的安裝方式. 在使用的時候碰到了問題. yield client.put('file',

阿里物件儲存OSS)使用小結

本文為使用OSS物件儲存小結,無廣告之嫌。 一.建立javaOSS上傳工具類 需要匯入的jar包在網站有,需要注意的是,httpclient.jar和httpcore.jar的版本需要保持一致,不然會上傳出錯。slf4j.jar 系列的也需要保持一致,上程式碼。 i

阿里物件儲存服務,OSS使用經驗總結,圖片儲存,分頁查詢

阿里雲OSS-使用經驗總結,儲存,賬號-許可權,分頁,縮圖,賬號切換最近專案中,需要使用雲端儲存,最後選擇了阿里雲-物件儲存服務OSS。總的來說,比較簡單,但是仍然遇到了幾個問題,需要總結下。1.OSS總的使用介紹  https://help.aliyun.com/docum

OSS阿里物件儲存服務前端JS下載日誌檔案

function downurl(path) {  var client = new OSS({ region: '地區', accessKeyId: 'accessKeyId', accessKeySecret: 'accessKeySecret', bucket: '域

通過雲端儲存閘道器實現阿里物件儲存跨地域訪問

某客戶在阿里雲的上海地域內有一臺位於VPC內部的ECS,想訪問同一阿里雲賬號下位於北京地域的一個OSS Bucket裡面的資料,同時又希望走阿里雲的內網流量以享受內網的頻寬。因為北京上海屬於不同的地域,所以如果使用ossutil或者ossfs這樣的工具進行Bucket裡面的檔案的直接訪問,只能

Java使用阿里OSS物件儲存上傳圖片

開發環境: 開發工具:eclipse4.4+jdk7 均64位 OSS Java SDK依賴下列包: aliyun-sdk-oss-2.2.1.jar hamcrest-core-1.1.jar jdom-1.1.jar commons-codec-1.9.jar

阿里 javascript上傳檔案(圖片、視訊、壓縮包等檔案)到 物件儲存 OSS ,返回上傳檔案、圖片、音訊、視訊等URL路徑

目的:前端上傳檔案(圖片、視訊、音訊等)到阿里雲伺服器裡面,並且獲得上傳檔案的URL路徑 前提:首先要買一個阿里雲伺服器,自己百度不會; 第一步:登入阿里雲賬號,點選管理控制檯-->物件儲存 OSS 第二步:新建儲存空間(圖一、圖二) (圖一) (圖二

【上傳檔案】基於阿里的視訊點播VOD、物件儲存OSS實現音視訊圖片等檔案上傳

一、效果演示 a.測試介面初始化 b.點選【上傳視訊】 c.點選【開始上傳】 d.點選【上傳音訊】選擇音訊之後點選【開始上傳】 c.點選【上傳圖片】,注意圖片上傳為單按鈕,選擇檔案之後自動完成上傳 d.點選【確定】來獲取以上幾個上傳檔案成功之後

使用java開發阿里OSS開放雲端儲存服務

購買了阿里雲後,我們發現一般ECS的儲存空間都比較小,當然我們可以動態的擴充套件一些儲存空間。但是作為開發者,我們在日常使用中需要一些更大的靈活性,因此就需要我們自己對OSS儲存有一些自己的擴充套件。今天就為大家分享一下如何使用java來對接阿里雲的OSS儲存服務。OSS產品

阿里產品物件儲存oss概述,有什麼優勢

阿里雲的產品種類繁多,今天讓我們一起來了解下物件儲存(Object Storage Service,簡稱OSS)吧! 詳情介紹:阿里雲物件儲存oss價格及產品詳情頁 什麼是物件儲存呢? 簡單來說,物件儲存OSS是阿里雲提供的海量、安全和高可靠的雲端儲存服務。儲存容量和處理能力的彈

thinkPHP實現物件儲存oss,將圖片上傳到阿里oss

演示效果和下載地址:http://www.erdangjiade.com/js/1021.html 可以在阿里雲網站下載oss的demo原始碼PHP版:v2.0.5 https://help.aliyun.com/document_detail/32174.html?sp

How To: 阿里物件儲存OSS服務的使用.

網上的雲端儲存服務有很多, 百度雲盤,360雲盤,等等,但是他們都不開放API, 使用的時候,有很大的侷限性. 昨天嘗試了一下阿里雲的OSS,感覺不錯,速度也挺快的.給力. 這篇文章就是一個簡單的guide, 所有的內容都可以從官方查出來, 我只不過是根據自己的操作順序,把

第八彈——阿里物件雲端儲存OSS

筆者也是剛剛接觸這種新東西,研究了一會搞懂了它的簡單的用法,我主要把一些圖片存在上面,通過外網連線供我的網頁呼叫,這樣直接省了一部分頻寬,額,我感覺有些用叉了,有點當成CDN的感覺………… 不說了,先來看看阿里雲官方的介紹: 阿里雲物件儲存服務(Obj

阿里伺服器 物件儲存OOS(二) ---圖片上傳與讀取demo

上一篇講解了無需程式碼操作的阿里OOS雲物件儲存 http://blog.csdn.net/u014520797/article/details/53945912 1、SDK下載,不下載也可以,文章最後有demo,demo裡面有jar包 https://help.aliyun.com/d