/// <summary> /// Gets the URL to upload assets to. /// </summary> public static void GetAssetUploadUrl(GetAssetUploadUrlRequest request, Action <GetAssetUploadUrlResponse> resultCallback, Action <PlayFabError> errorCallback, object customData = null, Dictionary <string, string> extraHeaders = null) { var context = (request == null ? null : request.AuthenticationContext) ?? PlayFabSettings.staticPlayer; PlayFabHttp.MakeApiCall("/MultiplayerServer/GetAssetUploadUrl", request, AuthType.EntityToken, resultCallback, errorCallback, customData, extraHeaders, context); }
/// <summary> /// Gets the URL to upload assets to. /// </summary> public void GetAssetUploadUrl(GetAssetUploadUrlRequest request, Action <GetAssetUploadUrlResponse> resultCallback, Action <PlayFabError> errorCallback, object customData = null, Dictionary <string, string> extraHeaders = null) { var context = (request == null ? null : request.AuthenticationContext) ?? authenticationContext; var callSettings = apiSettings ?? PlayFabSettings.staticSettings; if (!context.IsEntityLoggedIn()) { throw new PlayFabException(PlayFabExceptionCode.NotLoggedIn, "Must be logged in to call this method"); } PlayFabHttp.MakeApiCall("/MultiplayerServer/GetAssetUploadUrl", request, AuthType.EntityToken, resultCallback, errorCallback, customData, extraHeaders, context, callSettings, this); }
/// <summary> /// Uploads an asset (e.g. a server build, or art assets/other files to be deployed onto the docker container /// </summary> /// <returns> /// String representing the deployed file name /// </returns> public async Task <string> UploadAsset(string assetLocalPath, Dictionary <string, string> metaData) { metaData.Add("OriginalFilePath", assetLocalPath); // NOTE: We append a timestamp here to provide uniqueness. Duplicate asset keys are not allowed. Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; string assetRemoteName = String.Format("0_{0}_{1}", unixTimestamp, System.IO.Path.GetFileName(assetLocalPath)); GetAssetUploadUrlRequest assetURLRequest = new GetAssetUploadUrlRequest { FileName = assetRemoteName, }; var assetURLResponse = await PlayFab.PlayFabMultiplayerAPI.GetAssetUploadUrlAsync(assetURLRequest); bool hasError = CheckForError(assetURLResponse); if (!hasError) { // parse SAS token string sasToken = assetURLResponse.Result.AssetUploadUrl; sasToken = sasToken.Remove(sasToken.LastIndexOf("&api")); string storageAccountName = sasToken.Substring(8, sasToken.IndexOf("blob") - 9); sasToken = sasToken.Substring(sasToken.IndexOf("sv")); // Azure storage auth using SAS token StorageCredentials accountSAS = new StorageCredentials(sasToken); // Use these credentials and the account name to create a Blob service client. CloudStorageAccount accountWithSAS = new CloudStorageAccount(accountSAS, storageAccountName, endpointSuffix: null, useHttps: true); // create and upload blob CloudBlobClient blobClient = accountWithSAS.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference("gameassets"); var blob = container.GetBlockBlobReference(assetRemoteName); blob.Properties.ContentType = "application/zip"; await blob.UploadFromFileAsync(assetLocalPath); return(assetURLResponse.Result.FileName); } else { throw new Exception(String.Format("Upload Asset failed with error: {0}", assetURLResponse.Error.ErrorMessage)); } }
/// <summary> /// Gets the URL to upload assets to. /// </summary> public static void GetAssetUploadUrl(GetAssetUploadUrlRequest request, Action <GetAssetUploadUrlResponse> resultCallback, Action <PlayFabError> errorCallback, object customData = null, Dictionary <string, string> extraHeaders = null) { PlayFabHttp.MakeApiCall("/MultiplayerServer/GetAssetUploadUrl", request, AuthType.EntityToken, resultCallback, errorCallback, customData, extraHeaders); }
/// <summary> /// Gets the URL to upload assets to. /// </summary> public static async Task <PlayFabResult <GetAssetUploadUrlResponse> > GetAssetUploadUrlAsync(GetAssetUploadUrlRequest request, object customData = null, Dictionary <string, string> extraHeaders = null) { if (PlayFabSettings.EntityToken == null) { throw new PlayFabException(PlayFabExceptionCode.EntityTokenNotSet, "Must call GetEntityToken before calling this method"); } var httpResult = await PlayFabHttp.DoPost("/MultiplayerServer/GetAssetUploadUrl", request, "X-EntityToken", PlayFabSettings.EntityToken, extraHeaders); if (httpResult is PlayFabError) { var error = (PlayFabError)httpResult; PlayFabSettings.GlobalErrorHandler?.Invoke(error); return(new PlayFabResult <GetAssetUploadUrlResponse> { Error = error, CustomData = customData }); } var resultRawJson = (string)httpResult; var resultData = PluginManager.GetPlugin <ISerializerPlugin>(PluginContract.PlayFab_Serializer).DeserializeObject <PlayFabJsonSuccess <GetAssetUploadUrlResponse> >(resultRawJson); var result = resultData.data; return(new PlayFabResult <GetAssetUploadUrlResponse> { Result = result, CustomData = customData }); }