使用REST从s3存储桶下载文件

时间:2014-11-03 17:15:47

标签: java rest amazon-s3

我正在尝试从带有REST调用的s3存储桶下载。我能够创建存储桶,删除存储桶和列表存储桶。下载始终以找不到的对象或HTTP响应代码结束:403。代码如下。也有人知道如果亚马逊是sdk可以与非亚马逊网站一起使用吗?

public void getObject() throws Exception
{
String fmt = "EEE, dd MMM yyyy HH:mm:ss ";
    SimpleDateFormat df = new SimpleDateFormat(fmt, Locale.US);
    df.setTimeZone(TimeZone.getTimeZone("GMT"));
    String ob2 = "/bucket/test.txt";
    String bucket = "/bucket";
    String method = "GET"; 
    String contentMD5 = "";
    String contentType = "";
    String date = df.format(new Date()) + "GMT";        

    // Generate signature
    StringBuffer buf = new StringBuffer();
    buf.append(method).append("\n");
    buf.append(contentMD5).append("\n");
    buf.append(contentType).append("\n");
    buf.append(date).append("\n");
    buf.append(ob2);   
    String signature = sign(buf.toString());

    HttpURLConnection httpConn = null;
    URL url = new URL("https”,”s3demo.s3demosite.com",443,bucket);
    httpConn = (HttpURLConnection) url.openConnection();
    httpConn.setDoInput(true);
    httpConn.setDoOutput(true);
    httpConn.setUseCaches(false);
    httpConn.setDefaultUseCaches(false);
    httpConn.setAllowUserInteraction(true);
    httpConn.setRequestMethod(method);
    httpConn.setRequestProperty("Date", date);
    httpConn.setRequestProperty("Content-Length", "0");
    String AWSAuth = "AWS " + keyId + ":" + signature;
    httpConn.setRequestProperty("Authorization", AWSAuth);

    // Send the HTTP PUT request.
    int statusCode = httpConn.getResponseCode();
    InputStream err = httpConn.getErrorStream();
    InputStream is = null;
    is = httpConn.getInputStream();
    int ch;
    StringBuffer sb = new StringBuffer();
    while ((ch = err.read()) != -1) {
      sb.append((char) ch);
    }
    if ((statusCode/100) != 2)
    {
        // Deal with S3 error stream.
        InputStream in = httpConn.getErrorStream();
        System.out.println("Error: "+errorStr);
    }
    else
    {
        System.out.println("download worked”);
    }
}

0 个答案:

没有答案