// // Copyright 2014-2015 Amazon.com, // Inc. or its affiliates. All Rights Reserved. // // Licensed under the AWS Mobile SDK For Unity // Sample Application License Agreement (the "License"). // You may not use this file except in compliance with the // License. A copy of the License is located // in the "license" file accompanying this file. This file is // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR // CONDITIONS OF ANY KIND, express or implied. See the License // for the specific language governing permissions and // limitations under the License. // using UnityEngine; using System.Collections; using UnityEngine.UI; using Amazon.S3; using Amazon.S3.Model; using Amazon.Runtime; using System.IO; using System; using Amazon.S3.Util; using System.Collections.Generic; using Amazon.CognitoIdentity; using Amazon; public class S3Manager : MonoBehaviour { public string IdentityPoolId = "us-east-1:066cd25b-b249-4394-a267-7a49247aa8f9"; // vrchat identity pool id public string CognitoIdentityRegion = RegionEndpoint.USEast1.SystemName; private RegionEndpoint _CognitoIdentityRegion { get { return RegionEndpoint.GetBySystemName(CognitoIdentityRegion); } } public string S3Region = RegionEndpoint.USEast1.SystemName; private RegionEndpoint _S3Region { get { return RegionEndpoint.GetBySystemName(S3Region); } } public string S3BucketName = "vrc-uploads"; // vrchat private IAmazonS3 _s3Client; private AWSCredentials _credentials; private AWSCredentials Credentials { get { if (_credentials == null) _credentials = new CognitoAWSCredentials(IdentityPoolId, _CognitoIdentityRegion); return _credentials; } } private IAmazonS3 Client { get { if (_s3Client == null) { _s3Client = new AmazonS3Client(Credentials, _S3Region); } //test comment return _s3Client; } } void Start() { UnityInitializer.AttachToGameObject(this.gameObject); } /// /// Post Object to S3 Bucket. /// public PostObjectRequest PostObject(string filePath, string s3FolderName, Action onSuccess = null) { string fileName = s3FolderName + "/" + System.IO.Path.GetFileName(filePath); VRC.Core.Logger.Log ("uploading " + fileName, VRC.Core.DebugLevel.All); AWSConfigs.LoggingConfig.LogTo = LoggingOptions.None; var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); VRC.Core.Logger.Log ("Creating request object", VRC.Core.DebugLevel.All); var request = new PostObjectRequest() { Bucket = S3BucketName, Key = fileName, InputStream = stream, CannedACL = S3CannedACL.Private }; VRC.Core.Logger.Log ("Making HTTP post call", VRC.Core.DebugLevel.All); StartCoroutine(PostObjectRoutine(request, onSuccess)); return request; } IEnumerator PostObjectRoutine(PostObjectRequest request, Action onSuccess) { // make sure UnityInitializer call has time to initialize yield return null; yield return null; Client.PostObjectAsync(request, (responseObj) => { if (responseObj.Exception == null) { VRC.Core.Logger.Log("object " + responseObj.Request.Key + " posted to bucket " + responseObj.Request.Bucket, VRC.Core.DebugLevel.All); string s3Url = string.Format("https://s3-us-west-2.amazonaws.com/{0}/{1}", responseObj.Request.Bucket, responseObj.Request.Key); if(onSuccess != null) onSuccess(s3Url); } else { VRC.Core.Logger.Log ("Exception while posting the result object"); VRC.Core.Logger.Log("receieved error " + responseObj.Response.HttpStatusCode.ToString()); } }); } }