代码之家  ›  专栏  ›  技术社区  ›  Stephen McCormick

使用HttpURLConnection的Android AWS S3 Signature V4 Post

  •  0
  • Stephen McCormick  · 技术社区  · 8 年前

    我正在尝试使用新的签名V4直接发布到Android上的Amazon S3,而不是使用他们的SDK,使用 HttpURLConnection (我最近从 HttpClient ). 我有 可设定代理

    代码如下所示:

    String charset = "UTF-8";
    MultiPartUtility multipart = new MultiPartUtility(url, charset);
    multipart.addFormField("Content-Type", contentType);
    multipart.addFormField("Policy", policy);
    multipart.addFormField("key", key);
    multipart.addFormField("acl", acl);
    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
    String date = formatter.format(new Date());
    String credential = accessKey + "/" + date + "/" + region + "/s3/aws4_request";
    multipart.addFormField("X-Amz-Signature", signature);
    multipart.addFormField("X-Amz-Credential", credential);
    multipart.addFormField("X-Amz-Date", date + "T000000Z"); // 
    multipart.addFormField("x-amz-meta-uuid", uuid");
    multipart.addFormField("x-amz-server-side-encryption","AES256");
    multipart.addFormField("X-Amz-Algorithm","AWS4-HMAC-SHA256");
    multipart.addFormField("x-amz-meta-tag","");
    
    multipart.addFilePart("file", file);
    String response = multipart.finish();
    

    MultiPartUtility 班级正在处理与新课程相关的所有疯狂 可设定代理 多部分实体帖子的问题(我认为在这种情况下仍然需要)。代码可以在这里找到,我还需要做一些小的修改:

    http://www.codejava.net/java-se/networking/upload-files-by-sending-multipart-request-programmatically

    这会导致文件结束异常,因此我怀疑这些值中有错误或格式不正确。

    从Amazon示例中,我发现在网页上发布的内容看起来像是在加密值:

    Generating an AWS Signature v4 signature for uploading to s3

    在非HTTP示例中,看起来他们几乎是在将值推送到另一个对象中。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Stephen McCormick    8 年前

    结果发现,我缺少内容类型值-为空,然后导致文件结束异常。令人惊讶的是,例外如此模糊。哦,好吧。