6
votes

Obtenir de manière dynamique la taille des fichiers dans le godet Amazon S3

J'ai vu des questions précédentes sur "Comment trouver la taille d'un godet S3 entier". C'est quelque peu une question différente - donc je m'excuse à l'avance si c'est vague. Je ferai de mon mieux pour expliquer ce que j'essaie d'atteindre.

J'utilise actuellement Classe PHP Amazon S3 .

C'est ce que j'essaie d'atteindre:

  1. J'aimerais pouvoir boucler sur ma base de données MySQL et obtenir des noms de fichiers spécifiques sur mon serveur S3. (Cela peut être basé sur l'utilisateur).

  2. Pendant la boucle, interrogez le godet Amazon S3 (en quelque sorte) et obtenez le fichier de fichiers de chaque fichier dans ma boucle MySQL.

  3. Ajoutez tous les fichiers, pour obtenir un total approximatif de bytésize.

    Donc, essentiellement, disons que j'ai un utilisateur qui dispose de 5 fichiers sur le godet S3. Comment puis-je pouvoir interroger le godet S3, pour voir la quantité de données que les 5 fichiers de cet utilisateur stockent dans mon godet?

    Mes excuses si cela est difficile à comprendre. Je peux ré-articuler, si nécessaire.

    Toute nudge dans la bonne direction serait grandement appréciée.


0 commentaires

5 Réponses :


13
votes

Vous devez vraiment stocker la variation de votre table MySQL. Plus rapide pour obtenir l'info, moins de coût S3.

Mais ... Essayez ceci? P>

$s3 = new Aws\S3\S3Client($parameters);
$obj_data = $s3->headObject([
   'Bucket' => $bucket,
   'Key'    => $key
]);
echo 'Size is: '.$obj_data['ContentLength'];


2 commentaires

UPVOTE pour "Vous devez vraiment stocker le fichier de fichiers dans votre table MySQL"


Il n'y a pas de méthode getobjectinfo dans PHP AWS SDK. docs.aws.amazon. COM / AWS-SDK-PHP / V2 / API / ... docs.aws.amazon.com/aws-sdk-php/v3/aplia/...



7
votes

Maintenant que AWS a publié un support PHP SDK, vous voudrez peut-être envisager d'examiner la commutation pour utiliser: http: // aws. Amazon.com/sdkforphp/ .

Il inclut également l'API pour obtenir une taille d'objet: get_Object_filesize ().

Je suis d'accord avec John Ventimiglia. Chaque appel à S3 prend du temps et coûte de l'argent. Si vous pouvez stocker les informations localement, il fournira une meilleure expérience client (plus rapide) et sera moins chère.


1 commentaires

Je n'étais pas au courant du SDK AWS PHP. Je vais devoir jouer avec ça. Vous avez tous deux raison de stocker les informations. Je suis en train de stocker localement les fichiers. Merci beaucoup.



1
votes

Je stocke dans mon mySQL mais vous devez nettoyer et il est bon de connaître toute inadéquation entre votre MSYQL et S3. Lorsque j'ai besoin d'obtenir la taille du fichier, je liste tous les fichiers et comptez la taille du fichier xxx


0 commentaires

3
votes

Ajout à ChrisjmCcreadie Réponse.

La méthode list_Objects ('') est paginé qui peut ne pas fournir plus de résultats que 1000, comme la valeur par défaut est de 1000, vous devrez donc passer par la pagination pour des résultats précis complets.

Mais vous pouvez utiliser < Code> get_Object_list () méthode qui retournera touches max résultat.

inclure ("sdk.class.php"); xxx


0 commentaires

4
votes

En 2015, je dois utiliser http://docs.aws.amazon.com/aws-sdk-php/v2/guide/feature-s3-stream-wrapper.html pour ce xxx

et ensuite xxx

J'espère que cela aidera à quelqu'un.


0 commentaires