概述:
本地文件修改,而後須要覆蓋在七牛存儲空間本來已經存在的文件,那麼這時須要使用七牛提供的覆蓋上傳;html
問題:
如何實現,以及實現思路?java
思路:
1.七牛提供上傳策略,指定scope爲< bucketName> : < key>
便可實現覆蓋上傳,如圖:
七牛提供關於上傳策略的說明文檔連接以下:
http://developer.qiniu.com/article/developer/security/put-policy.htmlwindows
2.遵守七牛的開發規範,獲取Auth——-》獲取token——》執行覆蓋上傳的業務邏輯——》查看結果ide
示例以下:(注:當前使用的是qiniu-Java-sdk-7.2.1.jar)函數
1 package com.qiniu.kodo; 2 3 import com.qiniu.base.AccountMgr; 4 import com.qiniu.common.QiniuException; 5 import com.qiniu.common.Zone; 6 import com.qiniu.http.Response; 7 import com.qiniu.storage.Configuration; 8 import com.qiniu.storage.UploadManager; 9 import com.qiniu.util.Auth; 10 import com.qiniu.util.StringMap; 11 12 /** 13 * 七牛:覆蓋上傳 14 * 15 * @author xuhuanchao 16 * 17 */ 18 public class OverrideUpload { 19 20 //獲取受權對象 21 Auth auth = Auth.create(AccountMgr.ACCESS_KEY, AccountMgr.SECRET_KEY); 22 23 //第一種方式: 指定具體的要上傳的zone 24 //注:該具體指定的方式和如下自動識別的方式選擇其一便可 25 //要上傳的空間(bucket)的存儲區域爲華東時 26 // Zone z = Zone.zone0(); 27 //要上傳的空間(bucket)的存儲區域爲華北時 28 // Zone z = Zone.zone1(); 29 //要上傳的空間(bucket)的存儲區域爲華南時 30 // Zone z = Zone.zone2(); 31 32 //第二種方式: 自動識別要上傳的空間(bucket)的存儲區域是華東、華北、華南。 33 Zone zone = Zone.autoZone(); 34 35 Configuration config = new Configuration(zone); 36 UploadManager uploadManager = new UploadManager(config); 37 38 /** 39 * 獲取憑證 40 * @param bucketName 41 * 空間名稱 42 * @return 43 */ 44 public String getUpToken(String bucketName, String key) { 45 //insertOnly 若是但願只能上傳指定key的文件,而且不容許修改,那麼能夠將下面的 insertOnly 屬性值設爲 1 46 return auth.uploadToken(bucketName, key, 3600, new StringMap().put("insertOnly", 0)); 47 } 48 49 /** 50 * 覆蓋上傳 51 * @param path 52 * 上傳文件路徑 53 * @param bucketName 54 * 空間名 55 * @param key 56 * 文件名 57 */ 58 public void overrideUpload(String path, String bucketName, String key) { 59 try { 60 String token = getUpToken(bucketName, key);//獲取 token 61 Response response = uploadManager.put(path, key, token);//執行上傳,經過token來識別 該上傳是「覆蓋上傳」 62 System.out.println(response.toString()); 63 } catch (QiniuException e) { 64 System.out.println(e.response.statusCode); 65 e.printStackTrace(); 66 } 67 } 68 69 /** 70 * 主函數:測試 71 * 72 * @param args 73 */ 74 public static void main(String[] args) { 75 // 上傳文件的路徑,由於在Mac下,因此路徑和windows下不一樣 76 String filePath = "/Users/xuhuanchao/Documents/admin/mind/imgs/admin_3.jpg"; 77 // 要上傳的空間 78 String bucketName = "java-bucket"; 79 // 上傳到七牛後保存的文件名 80 String key = "admin_3.jpg"; 81 82 new OverrideUpload().overrideUpload(filePath, bucketName, key); 83 } 84 85 }