檔案上傳至阿里雲之OssUtil工具類的使用
阿新 • • 發佈:2018-12-13
什麼是Oss?
阿里雲物件儲存服務(Object Storage Service,簡稱OSS)為您提供基於網路的資料存取服務。使用OSS,您可以通過網路隨時儲存和呼叫包括文字、圖片、音訊和視訊等在內的各種非結構化資料檔案。
簡單來說,Oss支援任意型別的檔案遠端儲存(檔案型別包括但不僅限於圖片,視訊,文字),可以通過網路上傳或下載分享,有著高效能,安全,穩定的特性。
更多Oss介紹參考此篇文章:點我
通過OssBroswer初識Oss
假設你已經學習過Oss相關知識,並且已擁有了Oss賬號及儲存空間。請先下載OssBroswer,以便後續的開發除錯。
官網下載地址: 點我獲取下載地址
下載並安裝完畢後,開啟軟體,輸入對應的AK與AKS。
登陸成功可以看到已建的bucket(桶),後面的上傳請上傳至對應的bucket中即可。
Bucket下可以建立多個資料夾,可按照個人的分類習慣放入檔案。
OssUtil的使用
網上工具類可以找到很多,大家百度就可以找到,這裡我提供一個,該工具類有兩個方法,第一個方法用來上傳檔案至阿里雲,第二個方法用來獲取指定路徑下某個檔案的訪問路徑(或下載路徑),第三個方法用來刪除Oss指定路徑下的指定檔案。
先貼程式碼。
/** * * 上傳資料之阿里雲oss工具類 */ @Component public class OssUtil { public static final Logger LOGGER = LoggerFactory.getLogger(OssUtil.class); /** * 生成訪問圖片地址有效期 */ private static final int VISIT_URL_EXPIRATION = 365*10; /** * uploadFile:上傳檔案到Oss * @param accesKeyId accesKeyId * @param accessKeySecret accessKeySecret * @param endpoint endpoint * @param savePath 存放路徑 * @param bucketName bucket名字 * @param imageName 圖片名字 * @param fileInputStream 圖片流 * @param fileSize fileSize 圖片大小 * @throws Exception */ public static void uploadFile(String accesKeyId,String accessKeySecret,String endpoint,String savePath,String bucketName, String imageName, InputStream fileInputStream,Long fileSize) throws Exception { OSSClient client = new OSSClient(endpoint, accesKeyId, accessKeySecret); try { ObjectMetadata objectMeta = new ObjectMetadata(); objectMeta.setContentLength(fileSize); if (!savePath.endsWith("/")) { savePath = savePath + "/"; } client.putObject(bucketName,savePath + imageName, fileInputStream, objectMeta); } catch (Exception e) { LOGGER.error("上傳檔案到oss出錯", e); throw new Exception("上傳檔案到oss出錯"); } finally { if (fileInputStream != null) { try { fileInputStream.close(); client.shutdown(); } catch (IOException e) { LOGGER.error("上傳檔案到oss出錯", e); } } } } /** * 生成原圖訪問地址 * @param ossAccessKeyId * @param ossAccessKeySecret * @param ossEndPoint * @param ossBucketName * @param imageName * @param path * @return * @throws Exception */ public static String getVisitUrl( String ossAccessKeyId , String ossAccessKeySecret, String ossEndPoint, String ossBucketName, String path, String imageName ) throws Exception{ OSSClient client = new OSSClient(ossEndPoint, ossAccessKeyId, ossAccessKeySecret); try { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, VISIT_URL_EXPIRATION); return client.generatePresignedUrl(ossBucketName, path + "/" + imageName, calendar.getTime()).toString(); } catch (Exception e) { throw new Exception("生成訪問地址出錯"); }finally { client.shutdown(); } } /** * 刪除Oss原始檔 * @param ossAccessKeyId * @param ossAccessKeySecret * @param ossEndPoint * @param ossBucketName * @param savePath * @param bucketName * @param imageName */ public static void delete(String accesKeyId,String accessKeySecret,String endpoint,String savePath,String bucketName, String imageName) throws Exception { OSSClient client = new OSSClient(endpoint, accesKeyId, accessKeySecret); try { if (!savePath.endsWith("/")) { savePath = savePath + "/"; } client.deleteObject(bucketName, savePath+ imageName); } catch (Exception e) { LOGGER.error("刪除oss檔案出錯", e); throw new Exception("刪除oss檔案出錯"); } finally { client.shutdown(); } } }
本文旨在簡單介紹工具類的使用,不對上傳整個流程作宣告,後續文章會發上傳外掛的使用。
觀察這三個方法所需引數,可以看出,有以下引數是必須的:
- accesKeyId
- accessKeySecret
- endpoint
- savePath
- bucketName
- imageName
注意一下,savePath寫對應桶下資料夾的名字或路徑即可(不包含桶名)
附:工具類下載地址