- 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?