I would like to build a web service for an iPhone app. As for file uploads, I’m wondering what the standard procedure and most cost-effective solution is. As far as I can see, there are two possibilities:
- Client > S3: I upload a file from the iPhone to S3 directly (with the AWS SDK)
- Client > EC2 > S3: I upload a file to my server (EC2 running Django) and then the server uploads the file to S3 (as detailed in this post)
I’m not planning on modifying the file in any way. I only need to tell the database to add an entry. So if I were to upload a file Client > S3, I’d need to connect to the server anyways in order to do the database entry.
It seems as if EC2 > S3 doesn’t cost anything as long as the two are in the same region.
I’d be interested to hear what the advantages and disadvantages are before I start implementing file uploads.
I would definitely do it through S3 for scalability reasons. True, data between S3 and EC2 is fast and cheap, but uploads are long running, not like normal web requests. Therefore you may saturate the NIC on your EC2 instance.
Rather, return a GUID to the client, upload to S3 with the key set to the GUID and Content-Type set appropriately. Then call a web service/Ajax endpoint to create a DB record with the GUID key after the upload completes.