The state of Meteor and AWS S3 file upload?

Hello Guyz,
Migrated from cfs:s3 to slingshot ofcourse it is fab but in my case I am doing bulk upload of images and the images are around 250.

Some images are failed to upload and giving me error —> “error : failed to upload file to cloud storage [-0]”. Anyone know why it is throwing such a error.

Thanks in Advance!

I am doing bulk upload of around 250 images and some images are failing . Ended up with “error : failed to upload file to cloud storage [-0]”. Any idea why it this error is coming? Thanks in advance!

I’ve implement slingshot successfully, without using temporary AWS Credentials, however, when I try to implement it with temporary AWS Credentials, following this example, my application errors on the server with InvalidClientTokenId: The security token included in the request is invalid..

The problem appears to be with

var sts = new AWS.STS();
sts.getSessionToken({
  DurationSeconds: duration
}, function (error, result) {
  console.log('error', error);
  callback(error, result && result.Credentials);
});

If anyone could provide some insight into what could be causing thisI would appreciate it. I have an IAM account.

1 Like

@florianbienefelt

Question - Are you still using Slingshot? Did you ever get Evaporatejs working eventually? If not, what was the issue you were having?

This is a result of spending many days trying and also failing to make it work: File uploads - From Slingshot to EvaporateJS

+1 for slingshot. Using it on both mobile and web with the latest Meteor version.

I’m using my fork https://atmospherejs.com/tecsinapse/slingshot to have more control over progress.

Amazon provides an npm package containing an official SDK you can use to communicate with their services. In the case of S3, they have a feature called pre-signed URLs you can use. With this, clients (web browsers) will simply send a request to your meteor app (e.g. using a method), then your meteor app can use the SDK to ask S3 to generate a pre-signed URL that can be used to upload a file to a specific bucket with a specific key. Then you send back this pre-signed URL to the client (the web browser) which then can upload the file directly to S3 using this pre-signed URL.

This way, your meteor app will never receive the file, which gives the app quite a small load, but on the other hand the clients can upload whatever files they want to S3 (you might expect them to upload an image (a png file), but they upload a song instead (an mp3 file). That might or might not be a problem for you. If you need to verify this you could use a cloud lambda function that runs each time a new file is uploaded to your S3 bucket to verify this.

2 Likes

This is similar to how Slingshot works.

I personally user evaporate JS which does exactly what you describe, but with a fair few extra features that are helpful. I’d look into it (and anyone can feel free to let me know if they need help). I know it took me a while to get it working just right…

+1 to slingshot , using it on google , previously used it for amazon but moved out of amazon .