Im using Slingshot to upload images to an S3 bucket so users can set profile pictures. If they set a new profile picture the old one won’t be used again. How should I delete this old image?
I can think of 2 ways.
1: Use Slingshot to tell Amazon to delete the image when a new profile image is set.
2: Have a cron job with Amazon. As the image filenames are set to userID-date.jpg  presumably I could look for duplicate userID’s and then delete the older time?
Has anyone done either of these or tried a different approach?
             
            
              
              
              
            
            
                
                
              
           
          
            
            
              
What happens until then? Is a random picture selected each time the user gets to see the image?
             
            
              
              
              
            
            
                
                
              
           
          
            
            
              Slingshot gives me the url for the new image which I save to the database. So my app will show the new image.
Currently im not saving the old image url so there isnt really a way to ever see the old image again, which is why I might as well delete it.
             
            
              
              
              
            
            
                
                
              
           
          
            
            
              Okay 
I used this code in a project. If I recall correctly, there was a problem with result not throwing errors if for example the Key didnt exsist. But I am not sure …
import { AWS } from 'meteor/peerlibrary:aws-sdk';
...
if (!Meteor.settings.AWSAccessKeyId || !Meteor.settings.AWSSecretAccessKey || !Meteor.settings.AWSRegion) {
        throw new Meteor.Error('internal-error', `Internal Server Error.`);      
      }
      AWS.config.update({
        region: Meteor.settings.AWSRegion,
        accessKeyId: Meteor.settings.AWSAccessKeyId,
        secretAccessKey: Meteor.settings.AWSSecretAccessKey,
      })
      const s3 = new AWS.S3();
      let aURL = this.downloadUrl.split("/"); // This would be your URL
      const key = aURL.splice(aURL.length - 2, aURL.length).join("/");
      const result = s3.deleteObjectSync({
        Bucket: `${bucketname}`, // You have to specify it somewhere
        Key: `${key}`
      });
...
             
            
              
              
              1 Like