3

新しい PHP 2.0 SDK を使用してイメージを S3 バケットにプッシュする方法を理解しようとしています。私が見つけたのは、ローカル コンピューターからではなく、Web サーバーから画像をアップロードする方法のチュートリアルだけです。これが私が使用しているコードです

$result = $s3->putObject(array(
    'Bucket' => $bucketname,
    'Key'    => $filename,
    'SourceFile' => $path,
    'ACL'    => 'public-read',
    'ContentType' => 'image/jpeg',
    'StorageClass' => 'STANDARD'
));

$filenameは、バケットに表示するファイル名であり$path、コンピューター上のファイルへのローカル パスです。これにより、ファイルがバケットに配置されますが、画像を開こうとすると、画像のサムネイルが表示されていない空の画面として表示されます。確認したところ、30バイト程度しかアップロードされていないようです。誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

0

私は同じ問題を抱えていましたが、Shahinの答えは正しいです。設定できます 'Body' => fopen($tmpFile, 'r'),

ただし、WAMP ローカルホストでこれを実行すると、エラーが発生しました

Warning: fopen(C:\Windows\Temp\phpBDF3.tmp): failed to open stream: No such file or directory

これは Windows のアクセス許可の問題のようです。Windows の一時ファイルを、アクセス許可の問題がないディレクトリ (Web ルートなど) 内の別の一時ファイルにコピーすることで解決できます。

// $tmpFile was 'C:\Windows\Temp\php8A16.tmp';
// create a new temp file in webroot, and copy the windows tempfile there
$new_temp_location = tmpfile();
$new_temp_location = basename($tmpFile);
copy($tmpFile, $new_temp_location);

// now put the file in the bucket
try {
    $s3->putObject(array(
        'Bucket' => $bucketname,
        'Key' => $filename,
        'Body'   => fopen($new_temp_location, 'r'),
        'ACL' => 'public-read',
        'ContentType' => $imageType,
        'StorageClass' => 'STANDARD'
    ));
} catch (S3Exception $e) {
    echo "There was an error uploading the file.\n";
}

それは私にとってはうまくいきました-他の誰かの時間を節約できることを願っています...

編集:

または少し単純に、使用できます

'SourceFile'   => $new_temp_location,

それ以外の

'Body'   => fopen($new_temp_location, 'r'),
于 2014-08-22T09:39:35.307 に答える