开发者社区> 问答> 正文

OSS 上传功能 dir 值得问题

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import java.util.SimpleTimeZone;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.model.MatchMode;
import com.aliyun.oss.model.PolicyConditions;

public class PostPolicy {
    static final String endpoint = "http://******.oss-cn-hangzhou.aliyuncs.com";
    static final String accessId = "pWnzccu8tGQtC1dU";
    static final String accessKey = "J7HfpzLCqEWMAQHVhsbqXYanUxVzGG";
    
    static final String bucketName = "post-test";
    
    public static Map<String, String> getPostPolicy(String user_id){
        
        OSSClient client = new OSSClient(endpoint, accessId, accessKey);
        try {
            Date expiration = new Date(new Date().getTime() + 2900 * 1000);
            PolicyConditions policyConds = new PolicyConditions();
            policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
            policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, "user-dir");

            String postPolicy = client.generatePostPolicy(expiration, policyConds);
            byte[] binaryData = postPolicy.getBytes("utf-8");
            String encodedPolicy = BinaryUtil.toBase64String(binaryData);
            String postSignature = client.calculatePostSignature(postPolicy);
            
            Map<String, String> respMap = new LinkedHashMap<String, String>();
            respMap.put("accessid", accessId);
            respMap.put("host", endpoint);
            respMap.put("policy", encodedPolicy);
            respMap.put("signature", postSignature);
            respMap.put("expire", formatISO8601Date(expiration));
            respMap.put("dir", "1/");
            System.out.println(respMap.size());
            
            return respMap;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    private static String formatISO8601Date(Date date) {
        final String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
        SimpleDateFormat dateFormat = new SimpleDateFormat(pattern, Locale.CHINA);
        dateFormat.setTimeZone(new SimpleTimeZone(0, "GMT"));
        return dateFormat.format(date);
    }
}
为什么 我把dir 值 1/  改为 user-dir 就可以上传了
而 1/  或者 1  就会报错 错误如下
Error xml:<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>Invalid according to Policy: Policy Condition failed: ["starts-with", "$key", "user-dir"]</Message>
  <RequestId>566B88CAB295345D15A80F00</RequestId>
  <HostId>*******.oss-cn-hangzhou.aliyuncs.com</HostId>
</Error>
请大侠帮帮试试 顺便解答一下


展开
收起
JoneOne 2015-12-12 10:49:44 14651 0
4 条回答
写回答
取消 提交回答
  • ReOSS 上传功能 dir 值得问题
    policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, "user-dir");这里指定了上传文件的前缀是user-dir
    2016-11-09 14:55:28
    赞同 展开评论 打赏
  • 回 2楼(heliang_) 的帖子
    你遇到的问题是怎么样的?能详细说一下吗
    2016-03-09 16:39:51
    赞同 展开评论 打赏
  • ReOSS 上传功能 dir 值得问题
    你的问题解决了没有 我也碰到了你要解决了顺便就帮我一下
    2016-03-09 16:19:33
    赞同 展开评论 打赏
  • Java工程师
    ReOSS 上传功能 dir 值得问题
    dir 值可以 只有 已 user-dir-*    这样去匹配 这是为啥
    2015-12-12 10:56:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载