概述:
本地文件修改,而后须要覆盖在七牛存储空间本来已经存在的文件,那么这时须要使用七牛提供的覆盖上传;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 }