ci-dessous est un exemple de mon scénario, P>
1) Utilisateur télécharge le fichier nommé 'exemple-fichier.pdf' de l'interface utilisateur avec une URL présignée.
2) Utilisateur à nouveau télécharge le fichier avec le même nom 'exemple-fichier.pdf'
3) Je souhaite que les deux fichiers restent au même endroit avec un nom de fichier nouvellement téléchargé ajouté comme (1). Donc, par exemple, le nom de fichier nouvellement téléchargé sera 'Sample-File (1) .pdf'.
4) Si l'utilisateur télécharge à nouveau le même nom de fichier, le numéro suffit sera incrémenté et tous les fichiers seront au même emplacement / dossier dans S3 Seau. P>
Y a-t-il une solution facile et rapide à ce problème. P>
merci, Yogesh p>
3 Réponses :
aws s3 cp ./local_dir s3://your_s3_bucket --recursive
Il y a quelques problèmes avec cette solution proposée. Il ne traiterait pas de noms de fichiers avec espaces, il ne résout pas le problème de l'ajout d'un numéro de version, et il n'utilise pas d'URL pré-signées (qui constituent un élément important de cette question).
@jarmod - merci pour les commentaires. Je viens de mettre à jour les scripts. Et une fois que votre godet a une version activée. Vous n'avez pas besoin d'avoir la version dans votre nom de fichier car chaque fois que vous téléchargez quelque chose, vous aurez attaché Etag à votre fichier.
Ce que vous pouvez faire est de créer un événement S3 sur l'objet Créer qui envoie l'événement à une Lambda. La logique de la Lambda serait.
if object name doesn't not contain (#) then copy name.ext to name(#).ext end if
Il n'y a pas de solution simple, hors de la boîte dont je suis au courant. P>
Le plus grand défi que vous avez ici est que vous utilisez des URL pré-signées. Lorsque vous utilisez une URL pré-signée, l'utilisateur de l'URL pré-signée ne peut pas dicter le nom de fichier dans S3; Au lieu de cela, le créateur de l'URL pré-signée le dicte à l'avance. P>
Donc, une façon de résoudre ceci est que le générateur de l'URL pré-signée (je suppose que cela est fait de manière programmatique via AWSCLI Scripting ou similaire) devrait d'abord vérifier la présence d'un objet existant avec la clé souhaitée (et Toutes les variantes versions), renvoient ensuite une URL pré-signée pour l'objet avec le numéro de version gratuit suivant, au besoin. Si l'objet n'existe pas encore, renvoyez simplement une URL pré-signée régulière sans le numéro de version. Ce n'est pas idéal, surtout si plusieurs clients appellent simultanément le script, mais cela pourrait fonctionner dans un scénario simple. P>