1

私は単純な問題であると予想していたものに完全に行き詰まっています。次の Amazon AWS SDK2 スクリプトは、$filepath 変数がアップロードされるファイルへの絶対パスであり、スクリプト内で定義されている場合に、ファイルを AWS S3 に正常にアップロードします。

しかし、単純なフォームを使用してファイルを選択し、それを変数として AWS スクリプトに渡そうとすると、自分自身が結び付きます。たとえば、$_FILES['input1']['name']、$_FILES['input1']['tmp_name']、realpath()、file_get_contents() を試してフルパスにアクセスしました。また、javascript を使用してみましたが、パスはブラウザーによって「fakepath」に変更されます。要素内の type = “file” に関する何かがはっきりとわかりません。

それで、私の質問: ユーザーがローカル ディスクからファイルを選択し、(POST アクションを使用して??) ファイルのパスを変数として AWS SDK2 アップロード スクリプトに渡すことができるようにするにはどうすればよいですか? 私の簡単なテストフォームも以下に含まれています。

簡単な形式:

<body>
 <form id="form1" action="SDK2_script_process.php" method="post" enctype="multipart/form-data">
 <input type="file" id="input1" name="input1" />
 <input type="submit" name="submit" id="submit" value="Search" >
 </form> </body>

処理スクリプト(SDK2_script_process.php):

<?php
 //CONNECTS TO AWS V2 SDK AND UPLOADS FILE
//Literal path to aws.phar file
 require_once 'AWSSDKforPHP/aws.phar';

use Aws\S3\S3Client;
use Guzzle\Http\EntityBody;

// Instantiate the S3 client with AWS credentials and optional desired AWS region
 $client = S3Client::factory(array(
 'key' => 'MYKEY',
 'secret' => MYSECRETKEY'
  ));

//Name of bucket on S3
 $bucket = 'mybucket';
 //Filename to be saved in S3 Bucket
 $filename = "/directoryA/directoryB/filename.extension";

//Literal filepath to file I want to save - THIS WORKS
// $filepath = '../../directory1/directory2/directory3/filename.extension';

// Filepath from simple form - DOES NOT WORK 
 $filepath = $_FILES['input1']['tmp_name'];

$result = $client->putObject(array(
 'Bucket' => $bucket,
 'Key' => $filename,
 'SourceFile' => $filepath,
 'Metadata'   => array(
        'title' => 'This is the title metadata',
        'artist' => 'This is the artist metadata'
        )
 ));

// HEAD object confirms success
$headers = $client->headObject(array(
  "Bucket" => $bucket,
  "Key" => $filename
));
//print_r($headers->toArray());

echo $result['ObjectURL'];
echo $headers['Metadata']['artist'];


?>

この SDK2 スクリプトを使用する別の方法へのヘルプ、またはポインタに感謝します。

4

1 に答える 1

0

答えを見つけたと思います。putObject ではなく、PostObject を使用する必要があります。

Aws\S3\Model\PostObject を参照してください。SDK ドキュメントで。

于 2013-09-25T15:58:24.877 に答える