2011-07-22 2 views
0

をS3StatusConnectionFailed。誰かがこの状況がどのように起こるかを教えてくれますか?これはS3にファイルをアップロードする機能です。libs3は、私がここで見つけるlibs3ライブラリを使用してファイルのアップロードを行うことに取り組んでいます

int putFileIntoS3 (char *fileName, char *s3ObjName) { 

S3Status status; 
char *key; 
struct stat statBuf; 
uint64_t fileSize; 
FILE *fd; 
char *accessKeyId; 
char *secretAccessKey; 
put_object_callback_data data; 

accessKeyId = S3_ACCESS_KEY; 
secretAccessKey = S3_SECRET_ACCESS_KEY; 


key = (char*) strchr(s3ObjName, '/'); 
if (key == NULL) { 
    printf("S3 Key not defined!!!!"); 
    return (-1); 
} 


*key = '\0'; 
key++; 
if (stat(fileName, &statBuf) == -1) { 
    printf("Unknown input file"); 
    return(-1); 
} 

fileSize = statBuf.st_size; 

fd = fopen(fileName, "r"); 
if (fd == NULL) { 
    printf("Unable to open input file"); 
    return(-1); 
} 

data.infile = fd; 

S3BucketContext bucketContext = 
    {s3ObjName, S3ProtocolHTTP, S3UriStylePath, accessKeyId, secretAccessKey} 

S3PutObjectHandler putObjectHandler = { 
    { &responsePropertiesCallback, &responseCompleteCallback }, 
    &putObjectDataCallback 
}; 

if ((status = S3_initialize("s3", S3_INIT_ALL)) != S3StatusOK) { 
    printf("Failed to initialize libs3: %s\n",S3_get_status_name(status)); 
    return(-1); 
} 

S3_put_object(&bucketContext, key, fileSize, NULL, 0, &putObjectHandler, &data); 

if (statusG != S3StatusOK) { 
    printf("Put failed: %i\n", statusG); 
    S3_deinitialize(); 
    return(-1); 
} 

S3_deinitialize(); 

fclose(fd); 
return(0); 

} 

私は戻って、「失敗したPUT:46」を取得私はかなり確信している、それはS3StatusConnectionFailed誤りだということを意味します。

どんな助けがあればいいですか、あるいはC++でこれをやっている厄介なものの代わりに使うことができるbotoのようなライブラリへのポインタです。

ありがとうございます!

+0

これは実際にはCではなく、C++です:) –

+0

私はupload.cppに保存していますが、g ++をコンパイラとして使用しています...これはまだ動作するという印象を受けました。 –

+0

はい、C++から呼び出すことができますcuz libs3.hはg ++に名前を変更しないように頼んでいます(libs3.hのextern "C"構文)。 – Viren

答えて

0

私はnull以外の値を入れてみましたが、同じエラーが発生しました。私はその理由を発見:あなたはああ

fileSize = statBuf.st_size; 
//viren+ 
data.contentLength = fileSize; 
//viren- 
//.. 
data.infile = fd; 

以下のように(タイプput_object_callback_dataの)「データ」のん。ContentLengthを設定し、また、あなたのバケツに設定された適切なアクセス権を持っていることを確認しなければなりません。

0

S3_initializeの最初のパラメータにNULLを使用します。 S3StatusConnectionFailedは、 "s3" urlが間違っている可能性があることを示します。私はあなたが正しいS3_ACCESS_KEYとS3_SECRET_ACCESS_KEYを提供していると仮定します。

関連する問題