1. 程式人生 > >檔案上傳至阿里雲之OssUtil工具類的使用

檔案上傳至阿里雲之OssUtil工具類的使用

什麼是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();
		}
    }

}

本文旨在簡單介紹工具類的使用,不對上傳整個流程作宣告,後續文章會發上傳外掛的使用。

觀察這三個方法所需引數,可以看出,有以下引數是必須的:

  1. accesKeyId
  2. accessKeySecret
  3. endpoint
  4. savePath
  5. bucketName
  6. imageName

注意一下,savePath寫對應桶下資料夾的名字或路徑即可(不包含桶名)

附:工具類下載地址