- Home /
 
Upload to AWS S3 from Unity
Now I know this isn't necessarily a Unity related post but by posting here I hope it can help a few people going through the same thing.
So! A few years back I had this simple little script that would put whatever text you specified into a document on AWS S3. Times were good.
 void Start()
     {
         StartCoroutine(Upload());
     }
 
     IEnumerator Upload()
     {
         byte[] myData = System.Text.Encoding.UTF8.GetBytes("This is some test data");
         using (UnityWebRequest www = UnityWebRequest.Put("URLGOESHERE", myData))
         {
             
             yield return www.SendWebRequest();
 
             if (www.result != UnityWebRequest.Result.Success)
             {
                 Debug.Log(www.error);
             }
             else
             {
                 Debug.Log("Upload complete!");
             }
         }
     }
 
               Fast forward to now and the script doesn't work, giving me the error: HTTP/1.1 403 Forbidden.
Now I know this means I don't have the permissions, regardless if I make the document and/or bucket public or not.
So my next course of action was to dive into the AWS S3 SDK (so many acronyms!) to see if that was a solution.
This took a while to sort out because you have to set up an Identity Pool and link it to Roles in the IAM Management Console, but eventually I got it working.... sort of.
There's a section of code that specifies what you want to send to the document:
 if (!File.Exists(Application.persistentDataPath + Path.DirectorySeparatorChar + fileName))
             {
                 var streamReader = File.CreateText(Application.persistentDataPath + Path.DirectorySeparatorChar + fileName);
                 streamReader.WriteLine("This is a sample s3 file uploaded from unity s3 sample");
                 streamReader.Close();
             }
 
               And it sent that line. The issue came when I changed that line and tried to send the text again, but it stayed the same as the original. I even tried deleting and reuploading the original blank document but when I pressed the POST button, it still uploaded the original piece of text even though that was no longer in the scripting. I even tried setting it as a public string that I assigned in the Inspector, but still, only the original text would be seen on the document.
There is a Warning in my console that may be the cause?: The header Content-Length is managed automatically, setting it may have no effect or result in unexpected behavior.
Other than that, I can't find any other reference to that text string in the whole project so I can't understand why this is happening.
Any pearls of wisdom from the community?
Your answer