title: How do I upload files from a phone to my Amazon S3 server?
body: <p>I'm developing a mobile app with Unity and using S3 to store and retrieve assets, I can download asset bundles just fine from the server to the phone, but how do I upload files from the phone to the server? </p>
  
  <p>I used the PostObject function from the AWS Unity SDK, and it works fine if I upload from the computer as I know the directory, but I'm not sure how to get the phone's photo gallery to upload to the s3 server. </p>
  
  <p>This is the PostObject function</p>
  
  <pre class="lang-c# prettyprint-override"><code>public void PostObject(string fileName)
  {     
      ResultText.text = "Retrieving the file";
      var stream = new FileStream("file://" + Application.streamingAssetsPath + "/" + fileName,
      FileMode.Open, FileAccess.Read, FileShare.Read);
      Debug.Log("kek");
      ResultText.text += "\nCreating request object";
      var request = new PostObjectRequest()
      {
          Bucket = S3BucketName,
          Key = fileName,
          InputStream = stream,
          CannedACL = S3CannedACL.Private,
          Region = _S3Region
      };
  
      ResultText.text += "\nMaking HTTP post call";
  
      Client.PostObjectAsync(request, (responseObj) =&gt;
      {
          if (responseObj.Exception == null)
          {
              ResultText.text += string.Format("\nobject {0} posted to bucket {1}",
              responseObj.Request.Key, responseObj.Request.Bucket);
          }
          else
          {
              ResultText.text += "\nException while posting the result object";
              ResultText.text += string.Format("\n receieved error {0}",
              responseObj.Response.HttpStatusCode.ToString());
          }
      });
  }
  </code></pre>
  
  <p>And this is where I'm using it to upload the picture taken from the phone to the server</p>
  
  <pre class="lang-c# prettyprint-override"><code>public void TakePicture(int maxSize)
  {
      NativeCamera.Permission permission = NativeCamera.TakePicture((path) =&gt;
      {
          Debug.Log("Image path: " + path);
          if (path != null)
          {
              // Create a Texture2D from the captured image
              Texture2D imageTexture = NativeCamera.LoadImageAtPath(path, maxSize);
              if (imageTexture == null)
              {
                  Debug.Log("Couldn't load texture from " + path);
                  return;
              }
  
              //picturePreview.gameObject.SetActive(true);
              //picturePreview.texture = imageTexture;
  
              Texture2D readableTexture = DuplicateTexture(imageTexture);
  
              StartCoroutine(AddImageJob(readableTexture));
              //Saves taken photo to the Image Gallery
              if (isSaveFiles)
              {
                  NativeGallery.SaveImageToGallery(imageTexture, "AReview", "test");
  
                  //Upload to Amazon S3
                  aws.PostObject(imageTexture.name);
                  aws.PostObject("test");
              }
          }
      }, maxSize);
  
      Debug.Log("Permission result: " + permission);
  }
  </code></pre>
  
  <p>Any clues? </p>
  
  <p>Thank you.</p>