开发者社区> 问答> 正文

自己写的OSS上传程序被拒绝访问了

有自己开发OSS上传工具的吗?有没有遇到和我一样的情况?
我用的java,用httpput上传,设置的参数有:Authorization,Content-Md5,Cache-Control:no-cache,Content-Type:audio/mpeg(上传的是mp3文件),Date(ECS产生,应该不会有问题),Content-Encoding:UTF-8

展开
收起
kbyyd24 2015-03-02 21:21:56 8574 0
3 条回答
写回答
取消 提交回答
  • 阿里云对象存储(OSS)开发工程师
    回2楼kbyyd24的帖子
    你可以提供更具体些的出错信息,特别是RequestId,有助于定位问题的

    -------------------------

    回4楼kbyyd24的帖子
    Content-md5是指内容的md5再做base64编码,你提供的函数应该只是计算内容的md5值,如果要给 Content-md5这个头赋值的话,需要再做base64编码,你可以到官网的oss api文档中的PutObject找到说明
    2015-03-03 20:56:19
    赞同 展开评论 打赏
  • 回1楼deadbeef的帖子
    自己写的sdk,我把OSS设置成了公共读写也是拒绝访问

    -------------------------

    回3楼xgp的帖子
    已经解决了,不断用java的SDK抓包对比改过来的
    就是签名的细节错误:1. “OSS”和 accessKeyId 之间有一个空格  
                                     2.时间和"/bucket/object"之间,如果不加ossmeta,就只需要一个"\n"  
                                     3.有一次错误是说MD5无效,我就把计算签名和header里面的MD5去掉了,然后就成功了,但是不知道为什么会说MD5无效,可以帮忙看看吗?
    这是我算MD5的方法
    public static String getMd5ByFile(File file) throws IOException, NoSuchAlgorithmException {  
              String value = null;  
              FileInputStream in = new FileInputStream(file);
              MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());  
              MessageDigest md5 = MessageDigest.getInstance("MD5");  
              md5.update(byteBuffer);  
              BigInteger bi = new BigInteger(1, md5.digest());  
              value = bi.toString(16);
              in.close();
       //return value.toUpperCase();  
              return value;
        }


    2015-03-03 14:10:19
    赞同 展开评论 打赏
  • Re自己写的OSS上传程序被拒绝访问了
    你是用的官方 java sdk吗?如果是,是否可以提供一下你写的程序片段,程序运行出错信息?

    如果是自己写sdk,那么可以参考一下java sdk的写法。

    最好是能用tcpdump/wireshark对整个过程抓包。

    -------------------------

    Re自己写的OSS上传程序被拒绝访问了
    你提供一下具体的错误吧
    2015-03-03 07:52:36
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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