又拍雲Java SDK使用

上週寫了一個項目,用到了圖片上傳和存儲,使用的是又拍雲的雲存儲,本文記錄一下接入的流程和一些注意事項。

接入

又拍雲 Java SDK:https://github.com/upyun/java-sdk

pom 文件中引入依賴:

<dependency>
  <groupId>com.upyun</groupId>
  <artifactId>java-sdk</artifactId>
  <version>4.2.0</version>
</dependency>

使用

初始化 RestManager

RestManager manager = new RestManager("空間名稱", "操作員名稱", "操作員密碼");

其中,空間名稱即爲雲存儲的「服務名稱」。

上傳文件

public Response writeFile(String filePath, byte[] data, Map<String, String> params)
public Response writeFile(String filePath, File file, Map<String, String> params)
public Response writeFile(String filePath, InputStream inputStream, Map<String, String> params)
  • filePath 是保存到又拍雲存儲的文件路徑,以 / 開始。
  • 第二個參數 接受 InputStream 、 File 和 byte[] 三種類型的數據。
  • params 上傳額外可選參數,詳見 api 文檔

返回結果

Response response = manager.writeFile(filePath, file, params);

如果 response.isSuccessful() 爲 true,則表示上傳成功,通過又拍雲綁定的域名 + 定義文件的路徑 即可訪問文件。例如我的 filePath 是 /test/1.jpg,又拍雲綁定的域名是 https://cdn.juemuren4449.com,那麼文件的鏈接即爲 https://cdn.juemuren4449.com/test/1.jpg

關於更多上傳和其他操作可以參考:
java-sdk README.MD

遇到的問題

如果上傳有錯誤,可以通過查看 response.code() 對照下面的錯誤碼錶進行問題排查。

API 錯誤碼錶:http://docs.upyun.com/api/errno/#api

filePath 問題

第一次上傳的時候,我的 filePath 只寫了目錄名 /test,運行之後報錯爲 406。然後我才明白,這個 filePath 其實說白了就是把文件放到又拍雲的目錄加文件名,例如 /test/1.jpg,就是 test 目錄下的 1.jpg 文件,文件路徑的後綴要和文件的後綴一致。

編碼問題

我傳輸的文件是圖片,且不會重複,所以我直接把 file.getName() 作爲文件名,測試的時候一切正常,但是程序在 Windows 下會提示 path encoding should be utf8,錯誤碼是 40000030。

最後通過 URLEncoder.encode(file.getName(), "UTF-8")) 解決了問題,如果文件名有特殊字符,也推薦先進行 encode。當然,也可以自定義文件名。

文件覆蓋問題

若空間內指定目錄已存在相同文件,則會被覆蓋,且不可逆。

上傳的時候要特別注意,官方推薦可以通過獲取文件信息來判斷是否已存在相同文件,我個人認爲如果對文件名沒有要求,可以使用 UUID 或者 MD5 作爲文件名,也可以避免文件名重複。

更多各語言版本的 SDK 請查看:「存儲 & 處理 SDK」。

相關閱讀:

個人博客圖片存儲推薦–又拍雲

歡迎訪問的個人博客:掘墓人的小鏟子

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章