七牛云两种上传文件方式

客户端直接上传文件至七牛云

上传策略

参考官网文档七牛云上传策略

注意:

  • Key必须采用 utf-8 编码,使用非 utf-8 编码的资源名访问时会报错。callbackUrl 与 callbackBody 配合使用。returnUrl 与 returnBody 配合使用。callbackXXX 与 returnXXX 不可混用,详情自定义响应。
  • 文件上传后的命名将遵循以下规则:
    (1)源 Bucket 和目标 Bucket 必须在同一区域,即处理结果不能跨区域另存。
    (2)forceSaveKey=false,以客户端指定的 Key 为高优先级命名。
    客户端已指定 Key,以 Key 命名;
    客户端未指定 Key,上传策略中设置了 saveKey,以 saveKey 的格式命名。
    客户端未指定 Key,上传策略中未设置 saveKey,以文件 hash(etag) 命名。
    (3)forceSaveKey=true,以上传策略中的 saveKey 为高优先级命名;此时上传策略中的 saveKey 不允许为空。
    客户端已指定 Key,以上传策略中 saveKey 的格式命名;
    客户端未指定 Key,以上传策略中 saveKey 的格式命名;
  • 文件分片上传的创建文件步骤中。若未指定Key,为达到不覆盖同名资源效果,必须使用insertOnly字段。
代码示例
导入jar包
<!--七牛云上传图片服务-->
<dependency>       
        <groupId> com.qiniu</groupId>       
        <artifactId>qiniu-java-sdk</artifactId>       
        <version> 7.3.0 </version>
</dependency>
设置上传凭证
public String uploadToken() {    
Auth auth = Auth.create({{AccessKey}}, {{SecretKey}});   
String fileName = {{文件名}};   
StringMap policyMap = new StringMap();    
String callbackUrl ={{callbackUrl}}//上传成功的回调url 
//设置上传参数   
policyMap.put("scope", "static");  //设置 目标资源空间 Bucket 和资源键 Key
policyMap.put("deadline", System.currentTimeMillis() + 3600);  //上传凭证有效截止时间
/*//设置是否强制使用saveKey属性对文件命名    policyMap.put("forceSaveKey",true);*/   
policyMap.put("saveKey",fileName);  //设置文件key文件名
policyMap.put("callbackUrl", callbackUrl);  //设置上传成功回调url
policyMap.put("callbackBodyType", "application/json");   //设置回调参数格式json
policyMap.put("callbackBody", "{\"key\": $(key), \"hash\": $(etag)}");   //设置回调参数,魔法变量
String upToken = auth.uploadToken(constantQiniu.getBucket(), null,3600, policyMap);    
return upToken;}
回调接口编写
/** * 客户端上传七牛云回调接口 * */
@RequestMapping("/uploadCallback")
public BaseResponse<FileDO> uploadCallback(@RequestBody Map<String, Object> param){ 
    String key = (String) param.get("key");  
    return uploadService.uploadCallBack(key);
}

public BaseResponse<FileDO> uploadCallBack(String key){  
    FileDO fileDO = new FileDO();  
    if(StringUtils.isBlank(key)){  
        return BaseResponse.error("上传失败",-1);   
    }else { 
        String path = constantQiniu.getPath() + "/" + key;     
        fileDO.setUrl(path);   
    }   
    return BaseResponse.ok(fileDO);
}

客户端上传业务服务器

代码展示
上传方法
private String uploadQNImg(FileInputStream file, String key) {  
    // 构造一个带指定Zone对象的配置类    
    Configuration cfg = new Configuration();    
    // 其他参数参考类注释   
    UploadManager uploadManager = new UploadManager(cfg);    
    // 生成上传凭证,然后准备上传  
    String returnPath = null;    
    try {        
        Auth auth = Auth.create(constantQiniu.getAccessKey(), constantQiniu.getSecretKey());  
        String upToken = auth.uploadToken(constantQiniu.getBucket());       
        Response response = uploadManager.put(file, key, upToken, null, null);        
        // 解析上传成功的结果       
        DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);     
        returnPath = constantQiniu.getPath() + "/" + putRet.key;   
    } catch (Exception e) { 
        logger.error(e.getMessage(), e);   
    }  
    return returnPath;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值