2015-12-21 7 views
-1

У меня есть настройка учетной записи aws для хранения файлов. Я пытаюсь настроить представления так, чтобы файлы загружались в определенные папки, и я не могу найти ответ, который решает эту проблему. Я искал этот сайт, но не смог найти код, похожий на мой, и я немного новичок в php. Мой код берет прямо из руководства герою и aws.Как загрузить в определенную папку в aws

Мое понимание заключается в том, что я должен установить $ keyPrefix, но я не могу понять, что это правильно. Любая помощь будет принята с благодарностью.

<?php 
    // require('vendor/autoload.php'); 
    // this will simply read AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY from env vars 
    $s3 = Aws\S3\S3Client::factory(); 
    $bucket = getenv('S3_BUCKET')?: die('No "S3_BUCKET" config var in found in env!'); 
    $keyPrefix = 'assets/avatars/'; 
?> 

<html> 
    <head><meta charset="UTF-8"></head> 
    <body> 
    <h1>S3 upload example</h1> 

    <?php 
     if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['userfile']) && $_FILES['userfile']['error'] == UPLOAD_ERR_OK && is_uploaded_file($_FILES['userfile']['tmp_name'])) { 
print_r($_FILES, $keyPrefix); 

    // FIXME: add more validation, e.g. using ext/fileinfo 
    try { 
      // FIXME: do not use 'name' for upload (that's the original filename from the user's computer) 
     $upload = $s3->upload($bucket, $_FILES['userfile']['name'], fopen($_FILES['userfile']['tmp_name'], 'rb'), 'public-read'); 
    ?> 
    <p>Upload <a href="<?=htmlspecialchars($upload->get('ObjectURL'))?>">successful</a> :)</p> 
    <?php } catch(Exception $e) { ?> 
    <p>Upload error :(</p> 
    <?php } } ?> 
    <h2>Upload a file</h2> 
    <form enctype="multipart/form-data" action="/aws/upload" method="POST"> 
     <input name="userfile" type="file"> 
     <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
     <input type="submit" value="Upload"> 
    </form> 
    </body> 

+0

Можете ли вы описать, что связано с проблемой? В частности, любые сообщения об ошибках или то, что приведет к поведению, которое вы видите, поможет. Вы можете получить лучшее сообщение об ошибке, напечатав '$ e-> getMessage()' или не поймав исключение (не используя 'try ... catch'), чтобы мы увидели возвращенную ошибку. Как и сейчас, он «ел» ошибку, поэтому мы не можем сказать, в чем проблема. – fideloper

+0

Нет ошибки, файл сохраняется, а просто сохраняется в ведро, и я хочу поместить его в папку в ведре. –

ответ

1

Я не уверен, что версия библиотеки AWS вы используете, но последняя не появляется иметь upload метод. Вместо этого я предлагаю использовать метод putObject, как показано на примере на странице Github. (В качестве альтернативы, проверьте, какую версию клиента s3 вы используете, и мы можем видеть, не отличается ли она от нее).

От Github readme which has an example:

<?php 
// Upload a publicly accessible file. The file size and type are determined by the SDK. 
try { 
    $s3->putObject([ 
     'Bucket' => 'my-bucket', 
     'Key' => 'my-object', 
     'Body' => fopen('/path/to/file', 'r'), 
     'ACL' => 'public-read', 
    ]); 
} catch (Aws\Exception\S3Exception $e) { 
    echo "There was an error uploading the file.\n"; 
} 

complete docs are here Больше.

Смежные вопросы