最近做項目用到了七牛云存儲,就講一下如何使用springMVC對視頻上傳到七牛云上。
Java SDK依賴的第三方庫及其版本如下:
這個是使用maven管理的依賴。
也可以自己手動下載jar包 通過這個地址?? 找到
就可以下載需要的依賴的。
上傳使用的是服務器直傳的方式。
服務端直傳是指客戶利用七牛服務端SDK從服務端直接上傳文件到七牛云,交互的雙方一般都在機房里面,所以服務端可以自己生成上傳憑證,然后利用SDK中的上傳邏輯進行上傳,最后從七牛云獲取上傳的結果,這個過程中由于雙方都是業務服務器,所以很少利用到上傳回調的功能,而是直接自定義returnBody來獲取自定義的回復內容。
構建配置類
七牛存儲支持空間創建在不同的機房,在使用七牛的Java SDK中的UploadManager上傳文件之前,必須要構建一個上傳用的Configuration對象,在該對象中,可以指定空間對應的Zone以及其他的一些影響上傳的參數。
//構造一個帶指定Zone對象的配置類
Configuration cfg =newConfiguration(Zone.zone0());
//...其他參數參考類注釋
UploadManager uploadManager =newUploadManager(cfg);
//...生成上傳憑證,然后準備上傳
其中關于Zone對象和機房的關系如下:
機房:Zone對象
華東:Zone.zone0()
華北:Zone.zone1()
華南:Zone.zone2()
北美:Zone.zoneNa0()
最好是通過字節數組上傳。
不廢話,來看springMVC的控制器。
@Controller()
public class UploadController {
// 構造一個帶指定Zone對象的配置類
Configuration cfg = new Configuration(Zone.zone0());
// ...其他參數參考類注釋
UploadManager uploadManager = new UploadManager(cfg);
// ...生成上傳憑證,然后準備上傳
String accessKey = "xxxx";
String secretKey = "xxxx";
//上傳到指定的七牛云存儲的一個空間中
String bucket = "xxxx";
// 默認不指定key的情況下,以文件內容的hash值作為文件名(上傳后的文件名)
String key = null;
@RequestMapping("/upload")
@ResponseBody
public String upload(@RequestParam(value = "file", required = false) CommonsMultipartFile file) throws UnsupportedEncodingException {
try {
//得到上傳文件的文件名,并賦值給key作為七牛存儲的文件名
key = file.getOriginalFilename();
//把文件轉化為字節數組
InputStream is = file.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int len = -1;
while ((len = is.read(b)) != -1) {
bos.write(b, 0, len);
}
byte[] uploadBytes = bos.toByteArray();
//進行七牛的操作,不懂去七牛的sdk上看
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
//默認上傳接口回復對象
DefaultPutRet putRet;
try {
//進行上傳操作,傳入文件的字節數組,文件名,上傳空間,得到回復對象
Response response = uploadManager.put(uploadBytes, key, upToken);
putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);//key文件名
System.out.println(putRet.hash);//hash七牛返回的文件存儲的地址,可以使用這個地址加七牛給你提供的前綴訪問到這個視頻。
上傳憑證是你注冊七牛云時候給的,就是accessKey和secretKey。bucket是你在七牛上自己建立的空間,也是必須的。key是文件名,不指定七牛會給你生成一個默認名,并且是返回這個上傳的地址返回的地址。