1

我想获取 Amazon S3 存储桶中的对象和文件夹列表,但我不能,我不应该使用 Amazon S3 SDK。

重要的是不要使用 SDK,只有使用 Rest 和 Java 才能发送请求然后接收响应。我有这样的方法:

public String BucketSubList(String strPath) throws Exception {

    String answer = null;

    // S3 timestamp pattern.
    String fmt = "EEE, dd MMM yyyy HH:mm:ss ";
    SimpleDateFormat df = new SimpleDateFormat(fmt, Locale.US);
    df.setTimeZone(TimeZone.getTimeZone("GMT"));

    // Data needed for signature
    String method = "GET";
    String contentMD5 = "";
    String contentType = "";
    String date = df.format(new Date()) + "GMT";
    String bucket = "/" + strPath + "/";

    // 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(bucket);
    // try {
    String signature = sign(buf.toString());

    // Connection to s3.amazonaws.com
    URL url = new URL("http", "s3.amazonaws.com", 80, bucket);

    HttpURLConnection httpConn = null;
    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-Type", "text/plain");

    String AWSAuth = "AWS " + keyId + ":" + signature;
    httpConn.setRequestProperty("Authorization", AWSAuth);

    // Send the HTTP PUT request.
    int statusCode = httpConn.getResponseCode();
    System.out.println(statusCode);
    if ((statusCode / 100) != 2) {
        // Deal with S3 error stream.
        InputStream in = httpConn.getErrorStream();
        String errorStr = getS3ErrorCode(in);
        System.out.println("Error: " + errorStr);
    } else {
        answer = "";
        // System.out.println("Bucket listed successfully");
        InputStream inst = httpConn.getInputStream();
        BufferedReader in = new BufferedReader(new InputStreamReader(inst));
        String decodedString;
        while ((decodedString = in.readLine()) != null) {
            answer += decodedString;
            System.out.println(answer);
        }
        in.close();
    }

    return answer;
}
4

1 回答 1

1

在不知道您的问题是什么的情况下,我只能给您AWS S3 Rest API的链接。

这个方法做你想做的。

我希望这可以帮助你。

否则,请向我们提供有关您的问题的更多信息。

于 2013-05-14T10:54:45.417 回答