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