public async Task <IAsset> UploadAssetAsync(string localFilePath, UpdateProgressAction updateProgress, Guid assetProgressMoniker, CancellationToken cancellationToken) { Logger.Debug("UploadAssetAsync() invoked with localFilePath value '{0}'.", localFilePath); IAsset asset = null; IAccessPolicy uploadAccessPolicy = null; try { var assetName = Guid.NewGuid().ToString(); asset = await Context.Assets.CreateAsync(assetName, AssetCreationOptions.None, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); var assetFile = await asset.AssetFiles.CreateAsync(Path.GetFileName(localFilePath), cancellationToken).ConfigureAwait(continueOnCapturedContext: false); assetFile.IsPrimary = true; uploadAccessPolicy = await Context.AccessPolicies.CreateAsync("Upload Policy", TimeSpan.FromDays(1), AccessPermissions.Write | AccessPermissions.List).ConfigureAwait(continueOnCapturedContext: false); var uploadLocator = await Context.Locators.CreateLocatorAsync(LocatorType.Sas, asset, uploadAccessPolicy).ConfigureAwait(continueOnCapturedContext: false); var uploadClient = new BlobTransferClient(); uploadClient.TransferProgressChanged += (sender, e) => updateProgress(new WamsUploadProgressInfo(assetProgressMoniker, e)); await assetFile.UploadAsync(localFilePath, uploadClient, uploadLocator, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); await uploadLocator.DeleteAsync().ConfigureAwait(continueOnCapturedContext: false); await uploadAccessPolicy.DeleteAsync().ConfigureAwait(continueOnCapturedContext: false); Logger.Information("New asset with ID '{0}' was uploaded from temp file with name '{1}'.", asset.Id, localFilePath); return(asset); } catch (Exception ex) { if (ex is OperationCanceledException) { Logger.Information("Upload of asset with ID '{0}' from temp file with name '{1}' was canceled.", asset.Id, localFilePath); } else { Logger.Error(ex, "Error while uploading asset from temp file with name '{0}'. Cleaning up asset and any locators and access policy created for upload.", localFilePath); } try { if (asset != null) { asset.Delete(); // Deletes any locators also. } if (uploadAccessPolicy != null) { uploadAccessPolicy.Delete(); } } catch (Exception iex) { Logger.Warning(iex, "Error while cleaning up asset and any locators and access policy created for upload."); } throw; } }
public async Task<IAsset> UploadAssetAsync(string localFilePath, UpdateProgressAction updateProgress, Guid assetProgressMoniker, CancellationToken cancellationToken) { Logger.Debug("UploadAssetAsync() invoked with localFilePath value '{0}'.", localFilePath); IAsset asset = null; IAccessPolicy uploadAccessPolicy = null; try { var assetName = Guid.NewGuid().ToString(); asset = await Context.Assets.CreateAsync(assetName, AssetCreationOptions.None, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); var assetFile = await asset.AssetFiles.CreateAsync(Path.GetFileName(localFilePath), cancellationToken).ConfigureAwait(continueOnCapturedContext: false); assetFile.IsPrimary = true; uploadAccessPolicy = await Context.AccessPolicies.CreateAsync("Upload Policy", TimeSpan.FromDays(1), AccessPermissions.Write | AccessPermissions.List).ConfigureAwait(continueOnCapturedContext: false); var uploadLocator = await Context.Locators.CreateLocatorAsync(LocatorType.Sas, asset, uploadAccessPolicy).ConfigureAwait(continueOnCapturedContext: false); var uploadClient = new BlobTransferClient(); uploadClient.TransferProgressChanged += (sender, e) => updateProgress(new WamsUploadProgressInfo(assetProgressMoniker, e)); await assetFile.UploadAsync(localFilePath, uploadClient, uploadLocator, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); await uploadLocator.DeleteAsync().ConfigureAwait(continueOnCapturedContext: false); await uploadAccessPolicy.DeleteAsync().ConfigureAwait(continueOnCapturedContext: false); Logger.Information("New asset with ID '{0}' was uploaded from temp file with name '{1}'.", asset.Id, localFilePath); return asset; } catch (Exception ex) { if (ex is OperationCanceledException) Logger.Information("Upload of asset with ID '{0}' from temp file with name '{1}' was canceled.", asset.Id, localFilePath); else Logger.Error(ex, "Error while uploading asset from temp file with name '{0}'. Cleaning up asset and any locators and access policy created for upload.", localFilePath); try { if (asset != null) asset.Delete(); // Deletes any locators also. if (uploadAccessPolicy != null) uploadAccessPolicy.Delete(); } catch (Exception iex) { Logger.Warning(iex, "Error while cleaning up asset and any locators and access policy created for upload."); } throw; } }