官網::?對象存儲(Object Storage Service边臼,簡稱OSS)
第一步:創(chuàng)建maven項目
第二步:引入依賴
第三步:創(chuàng)建OSSUnit類
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
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{
? ? ? ? // endpoint以北京為例针姿,其它region請按實際情況填寫
? ? ? ? ENDPOINT= "oss-cn-beijing.aliyuncs.com";
? ? ? ? // 云賬號AccessKey有所有API訪問權限果元,建議遵循阿里云安全最佳實踐勾哩,創(chuàng)建并使用RAM子賬號進行API訪問或日常運維歇僧,請登錄 https://ram.console.aliyun.com 創(chuàng)建
? ? ? ? ACCESS_KEY_ID = "你的KEY_ID";
? ? ? ? ACCESS_KEY_SECRET = "你的KEY_SECRET";
? ? }
? ? /**
? ? * 獲取阿里云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();
? ? ? ? ? ? //創(chuàng)建上傳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";
? ? }
}
第四步:創(chuàng)建測試類OSSUnitTest
import static org.junit.Assert.assertEquals;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import com.aa.OSSUnit;
import com.aliyun.oss.OSSClient;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OSSUnitTest {
? ? //log
? ? private static final Logger LOG = LoggerFactory.getLogger(OSSUnitTest.class);
? ? private OSSUnit ossunit = null;
? ? private OSSClient client = null;
? ? private String bucketName = "alandbbt";//根據
? ? @Before
? ? public void initUnit(){
? ? ? ? ossunit = new OSSUnit();
? ? ? ? client = OSSUnit.getOSSClient();
? ? }
? ? @Test
? ? public void testCreateBucket() {
? ? ? ? String bucketName = "oss-test-my";
? ? ? ? //創(chuàng)建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 = "D:/1.png";//你的文件地址
? ? ? ? File file = new File(flilePathName);
? ? ? ? String diskName = "datas/image/";//你要存放的Bucket的目錄?
? ? ? ? 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/", "1.jpg");
? ? ? ? //console log : 刪除oss-test-my下的文件datas/image/preossimg.jpg成功
? ? }
}