2013-05-14 106 views
1

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

重要的是不要使用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; 
} 
+1

问题是什么? – 2013-05-14 10:43:26

+0

这听起来很像家庭作业。 – 2013-05-14 16:26:36

回答

1

不知道你的问题是什么,我只可以给你的链接AWS S3 Rest API

This method做你想做的。

我希望这可以帮助你。

否则,请给我们一些关于您的问题的更多信息。

相关问题