2017-09-30 1 views
0

voulez mettre des données uniquement si les données distantes existantes (si elle existe) n'a pas été modifié depuis les données locales.AWS S3 mettre l'objet si pas modifié depuis (PHP)

Il ne semble pas y avoir de mécanisme pour gérer cela dans putObject, mon plan était donc d'exécuter headObject avec la clé IfModifiedSince dans la requête pour déterminer si un 304 Non modifié est retourné. Cependant, je ne suis pas sûr de savoir comment faire cela (ne trouve rien sur les codes d'état http dans l'objet $ resultat dans les docs, $ résultat ressemble à un tableau associatif), mais je ne sais pas si c'est le moyen de faites-le ou s'il y a un meilleur moyen. Je soupçonne que dans le cas de 304 une exception sera soulevée et c'est dans $ e-> statusCode mais je ne suis pas sûr; Je suis curieux en général de savoir quelle est la structure de réponse de headObject dans tous les cas.

Merci

Répondre

0

Lorsque vous téléchargez un objet à S3, le dernier-temps modifié est le temps du téléchargement et non la dernière modification date de l'objet source. Lorsque nous écrivons un logiciel personnalisé S3, nous stockons un en-tête personnalisé dans la clé avec l'heure de dernière modification d'origine afin que nous puissions ensuite comparer cela pour déterminer si une mise à jour de fichier est requise.

Les en-têtes personnalisés commencent par "x-amz-meta-XXX". Remplacez le XXX avec votre nom d'en-tête personnalisé. Puis incluez l'heure avec cet en-tête.

Vous allez ensuite lire les en-têtes de clé (objet) et comparer les dates pour déterminer si un téléchargement est nécessaire.

Une autre méthode consiste à créer un MD5 du fichier source et à le comparer à la valeur MD5 stockée par AWS avec l'objet S3. AWS recommande de créer un MD5 du fichier source et de fournir cette valeur lors du téléchargement d'un objet afin qu'AWS puisse détecter la corruption de données lors du transfert de données.