Amazon S3数据存储
生活随笔
收集整理的這篇文章主要介紹了
Amazon S3数据存储
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
從官網(wǎng)下載aws 的unity插件,并做了簡單修改(主要用修改PostObject),問題:
(一)獲取Pool ID
通過服務(wù)-Cognito-管理/新建用戶池,可以新建或者獲取Pool ID
(二)上傳失敗問題
使用unity插件中S3Example中PostObject時(shí)拋異常,但是獲取GetObject沒問題,此時(shí)需要在上傳時(shí)代碼中加一下區(qū)域,如下圖所示。如果此時(shí)正在***,請暫停***,不允許通過代理訪問(貌似是,本人報(bào)代理異常,改用VPN或者暫停***代理即可)
?
?//----------------------------------------------代碼--------------------------------------------------//
using UnityEngine; using Amazon.S3; using Amazon.S3.Model; using Amazon.Runtime; using System.IO; using System; using System.Collections.Generic; using Amazon.CognitoIdentity; using Amazon;public class AmazonS3Sdk : MonoBehaviour {public string IdentityPoolId = "";public string CognitoIdentityRegion = RegionEndpoint.APSoutheast1.SystemName;private RegionEndpoint _CognitoIdentityRegion{get { return RegionEndpoint.GetBySystemName(CognitoIdentityRegion); }}public string S3Region = RegionEndpoint.APSoutheast1.SystemName;private RegionEndpoint _S3Region{get { return RegionEndpoint.GetBySystemName(S3Region); }}public string S3BucketName = null;public string SampleFileName = null;void Start(){UnityInitializer.AttachToGameObject(this.gameObject);AWSConfigs.HttpClient = AWSConfigs.HttpClientOption.UnityWebRequest;}#region private membersprivate 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 commentreturn _s3Client;}}#endregion#region Get Bucket List/// <summary>/// Example method to Demostrate GetBucketList/// </summary>public void GetBucketList(){Debug.Log("Fetching all the Buckets");Client.ListBucketsAsync(new ListBucketsRequest(), (responseObject) =>{Debug.Log(responseObject.Exception.ToString());if (responseObject.Exception == null){Debug.Log("Got Response");responseObject.Response.Buckets.ForEach((s3b) =>{string info = string.Format("bucket = {0}, created date = {1} \n", s3b.BucketName, s3b.CreationDate);Debug.Log(info);});}else{//ResultText.text += "Got Exception " + responseObject.Exception.ToString();Debug.Log("Fetching Buckets Exception:" + responseObject.Exception.ToString());}});}#endregion/// <summary>/// Get Object from S3 Bucket/// </summary>private void GetObject(){string info = string.Format("fetching {0} from bucket {1}", SampleFileName, S3BucketName);Debug.Log(info);Client.GetObjectAsync(S3BucketName, SampleFileName, (responseObj) =>{string data = null;var response = responseObj.Response;if (response.ResponseStream != null){using (StreamReader reader = new StreamReader(response.ResponseStream)){data = reader.ReadToEnd();}Debug.Log(data);//ResultText.text += data; }});}/// <summary>/// Post Object to S3 Bucket. /// </summary>public void PostObject(string file,string key,Action<string> action){Debug.Log("Posting the file");var stream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read);//ResultText.text += "\nCreating request object";var request = new PostObjectRequest(){Bucket = S3BucketName,//Key = fileName,Key = key,InputStream = stream,CannedACL = S3CannedACL.Private,Region = _S3Region};Debug.Log("Making HTTP post call");Client.PostObjectAsync(request, (responseObj) =>{if (responseObj.Exception == null){string info = string.Format("\nobject {0} posted to bucket {1}", responseObj.Request.Key, responseObj.Request.Bucket);Debug.Log(info);if (action != null)action(responseObj.Request.Key);}else{Debug.Log("Posting Exception:"+ responseObj.Exception.ToString());//ResultText.text += string.Format("\n receieved error {0}", responseObj.Response.HttpStatusCode.ToString()); }});}/// <summary>/// Get Objects from S3 Bucket/// </summary>public void GetObjects(){Debug.Log("Fetching all the Objects from " + S3BucketName);var request = new ListObjectsRequest(){BucketName = S3BucketName};Client.ListObjectsAsync(request, (responseObject) =>{//ResultText.text += "\n";if (responseObject.Exception == null){//ResultText.text += "Got Response \nPrinting now \n";responseObject.Response.S3Objects.ForEach((o) =>{string info = string.Format("{0}\n", o.Key);Debug.Log(info);});}else{string info = "Fetching Objects Exception:"+ responseObject.Exception.ToString();Debug.Log(info);}});}/// <summary>/// Delete Objects in S3 Bucket/// </summary>public void DeleteObject(){string info = string.Format("deleting {0} from bucket {1}", SampleFileName, S3BucketName);Debug.Log(info);List<KeyVersion> objects = new List<KeyVersion>();objects.Add(new KeyVersion(){Key = SampleFileName});var request = new DeleteObjectsRequest(){BucketName = S3BucketName,Objects = objects};Client.DeleteObjectsAsync(request, (responseObj) =>{//ResultText.text += "\n";if (responseObj.Exception == null){//ResultText.text += "Got Response \n \n";//ResultText.text += string.Format("deleted objects \n"); responseObj.Response.DeletedObjects.ForEach((dObj) =>{string str = dObj.Key;Debug.Log(str);});}else{string str = "Got Exception \n";Debug.Log(str);}});}private string GetFileHelper(){var fileName = SampleFileName;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();}return fileName;}private string GetPostPolicy(string bucketName, string key, string contentType){bucketName = bucketName.Trim();key = key.Trim();// uploadFileName cannot start with /if (!string.IsNullOrEmpty(key) && key[0] == '/'){throw new ArgumentException("uploadFileName cannot start with / ");}contentType = contentType.Trim();if (string.IsNullOrEmpty(bucketName)){throw new ArgumentException("bucketName cannot be null or empty. It's required to build post policy");}if (string.IsNullOrEmpty(key)){throw new ArgumentException("uploadFileName cannot be null or empty. It's required to build post policy");}if (string.IsNullOrEmpty(contentType)){throw new ArgumentException("contentType cannot be null or empty. It's required to build post policy");}string policyString = null;int position = key.LastIndexOf('/');if (position == -1){policyString = "{\"expiration\": \"" + DateTime.UtcNow.AddHours(24).ToString("yyyy-MM-ddTHH:mm:ssZ") + "\",\"conditions\": [{\"bucket\": \"" +bucketName + "\"},[\"starts-with\", \"$key\", \"" + "\"],{\"acl\": \"private\"},[\"eq\", \"$Content-Type\", " + "\"" + contentType + "\"" + "]]}";}else{policyString = "{\"expiration\": \"" + DateTime.UtcNow.AddHours(24).ToString("yyyy-MM-ddTHH:mm:ssZ") + "\",\"conditions\": [{\"bucket\": \"" +bucketName + "\"},[\"starts-with\", \"$key\", \"" + key.Substring(0, position) + "/\"],{\"acl\": \"private\"},[\"eq\", \"$Content-Type\", " + "\"" + contentType + "\"" + "]]}";}return policyString;}}?
下面為.Net的上傳物體可用代碼
//private static readonly string awsAccessKey = "*****************";//private static readonly string awsSecretKey = "***************************";private static readonly string awsAccessKey = "**********************************";private static readonly string awsSecretKey = "**************************";private static readonly string bucketName = "************";//private static readonly string bucketName = "****************";static AmazonS3Config config = new AmazonS3Config(){ServiceURL = "http://s3.amazonaws.com"};static AmazonS3Client client;//static AmazonS3Client amazonS3Client;static void Main(string[] args){//FileStream stream = File.OpenRead(args[0]);FileStream stream = File.OpenRead(@"D:\1107.jpg");//string resourcePath = @"D:\Demo\002.jpg";string info;//CreateBucket("test");//GetBucketList();//UploadbyPath(resourcePath);//Download(args[0]);using (AmazonS3Client amazonS3Client = new AmazonS3Client(awsAccessKey, awsSecretKey, config)){PutObjectRequest request = new PutObjectRequest(){BucketName = bucketName,//FilePath = args[0],InputStream = stream,CannedACL = S3CannedACL.PublicReadWrite,Key = Path.GetFileName("123")//ContentType = "text/plain" };try{amazonS3Client.PutObject(request);info = "success";//amazonS3Client.Dispose(); }catch (AmazonS3Exception ex){info = "failed:" + ex.Message;}//TransferUtility transfer = new TransferUtility(amazonS3Client);//transfer.Upload(path, bucketName, Path.GetFileName(path)); }//stream.Close();//stream.Dispose();//amazonS3Client.Dispose();//return args[0]; Console.WriteLine(info);Console.ReadKey();}?
轉(zhuǎn)載于:https://www.cnblogs.com/llstart-new0201/p/9945540.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Amazon S3数据存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 头像图片裁剪
- 下一篇: 自定event事件之手动触发(一)