2017-05-05 12 views
0

の代わりにバケットにアップロードされているオブジェクトである以下のコードアマゾンS3:私はAmazon S3のバケットにファイルをアップロードするために使用されているいるコード上記のように、 `key`がファイル

import java.io.File; 
import java.io.IOException; 

import com.amazonaws.AmazonClientException; 
import com.amazonaws.AmazonServiceException; 
import com.amazonaws.auth.AWSStaticCredentialsProvider; 
import com.amazonaws.auth.BasicAWSCredentials; 
import com.amazonaws.auth.profile.ProfileCredentialsProvider; 
import com.amazonaws.regions.Regions; 
import com.amazonaws.services.s3.AmazonS3; 
import com.amazonaws.services.s3.AmazonS3Client; 
import com.amazonaws.services.s3.AmazonS3ClientBuilder; 
import com.amazonaws.services.s3.model.PutObjectRequest; 

public class UploadObjectSingleOperation { 
    private static String bucketName  = "*******"; 
    private static String keyName  = "************"; 
    private static String uploadFileName = "C:/Users/Yohan/Desktop/asdasd.html"; 

    public static void main(String[] args) throws IOException { 
     BasicAWSCredentials creds = new BasicAWSCredentials(keyName, "**********"); 
     AmazonS3 s3client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(creds)).withRegion(Regions.AP_SOUTH_1).build(); 
//   AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider()); 
     try { 
      System.out.println("Uploading a new object to S3 from a file\n"); 
      File file = new File(uploadFileName); 

      s3client.putObject(new PutObjectRequest(
            bucketName, keyName, file)); 

     } catch (AmazonServiceException ase) { 
      System.out.println("Caught an AmazonServiceException, which " + 
        "means your request made it " + 
        "to Amazon S3, but was rejected with an error response" + 
        " for some reason."); 
      System.out.println("Error Message: " + ase.getMessage()); 
      System.out.println("HTTP Status Code: " + ase.getStatusCode()); 
      System.out.println("AWS Error Code: " + ase.getErrorCode()); 
      System.out.println("Error Type:  " + ase.getErrorType()); 
      System.out.println("Request ID:  " + ase.getRequestId()); 
     } catch (AmazonClientException ace) { 
      System.out.println("Caught an AmazonClientException, which " + 
        "means the client encountered " + 
        "an internal error while trying to " + 
        "communicate with S3, " + 
        "such as not being able to access the network."); 
      System.out.println("Error Message: " + ace.getMessage()); 
     } 
    } 
} 

OKを確認してください。私のS3バケットは、クライアントに最も近い場所にあります。Asia Pacific - Mumbai

上記のコードは正常に動作します、しかし、私は次のように気づきました。

  1. アップロードされる内容は、常にkeyです。実際のファイルはアップロードされていません。下の画像をご確認ください。

enter image description here

なぜこの出来事はありますか?私はS3のWebインターフェイスを使用してファイルをアップロードするとき、それは完全に正常に動作します。

+0

私は本当にあなたの問題の解決策をあなたの「答え」を考えていません。 S3の は、 'keyName'は、スラッシュやバックスラッシュなどの特殊なプレフィックスを含むあなたの**オブジェクト名**、です。 AWS API Keyとは関係ありません。 – mootmoot

答えて

-1

は、間違いを発見されました。

http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpJava.htmlは、しかし、私はそれが正しくないか、廃止予定であると確信している - 私の質問のコードは、Amazonのチュートリアルからです。このため

下の行に注意して

s3client.putObject(new PutObjectRequest(bucketName, keyName, file)); 

仕事に、代わりにkeyName、あなたは拡張子を持つファイル名を渡す必要があります。たとえばwebsitepage.htmlです。

+0

サンプルコードは正しいです。 S3は 'パス/に-どこオンバケットあなた-希望ツーセーブ/あなた/ファイル/あなた/あると呼んでいるものである - 'プライベート静的な文字列keyName'は、S3のオブジェクトキーに設定されている必要があります/ uploading.html' 「アクセスキー」のように「キー」ではなく、「キー/値ストア」のように「キー」になります。パス+名前はキー、ファイルの内容は値です。たとえば、用語[ここ](http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingObjects.html)を参照してください。 –

関連する問題