/// <summary> /// Converts the source blob of a copy operation to an appropriate access URI, taking Shared Access Signature credentials into account. /// </summary> /// <param name="source">The source blob.</param> /// <returns>A URI addressing the source blob, using SAS if appropriate.</returns> internal static Uri SourceBlobToUri(ICloudBlob source) { Uri sourceUri = source.ServiceClient.Credentials.TransformUri(source.Uri); if (source.SnapshotTime.HasValue) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add("snapshot", BlobRequest.ConvertDateTimeToSnapshotString(source.SnapshotTime.Value)); sourceUri = builder.AddToUri(sourceUri); } return(sourceUri); }
/// <summary> /// Gets the canonical name of the blob, formatted as /<account-name>/<container-name>/<blob-name>. /// If <c>ignoreSnapshotTime</c> is <c>false</c> and this blob is a snapshot, the canonical name is augmented with a /// query of the form ?snapshot=<snapshot-time>. /// <para>This is used by both Shared Access and Copy blob operations.</para> /// </summary> /// <param name="ignoreSnapshotTime">Indicates if the snapshot time is ignored.</param> /// <returns>The canonical name of the blob.</returns> private string GetCanonicalName(bool ignoreSnapshotTime) { string accountName = this.ServiceClient.Credentials.AccountName; string containerName = this.Container.Name; string blobName = this.Name; string canonicalName = string.Format("/{0}/{1}/{2}", accountName, containerName, blobName); if (!ignoreSnapshotTime && this.SnapshotTime != null) { canonicalName += "?snapshot=" + BlobRequest.ConvertDateTimeToSnapshotString(this.SnapshotTime.Value); } return(canonicalName); }
/// <summary> /// Gets the canonical name of the blob, formatted as /<account-name>/<container-name>/<blob-name>. /// If <c>ignoreSnapshotTime</c> is <c>false</c> and this blob is a snapshot, the canonical name is augmented with a /// query of the form ?snapshot=<snapshot-time>. /// <para>This is used by both Shared Access and Copy blob operations.</para> /// </summary> /// <param name="ignoreSnapshotTime">Indicates if the snapshot time is ignored.</param> /// <returns>The canonical name of the blob.</returns> private string GetCanonicalName(bool ignoreSnapshotTime) { string accountName = this.ServiceClient.Credentials.AccountName; string containerName = this.Container.Name; // Replace \ with / for uri compatibility when running under .net 4.5. string blobName = this.Name.Replace('\\', '/'); string canonicalName = string.Format(CultureInfo.InvariantCulture, "/{0}/{1}/{2}", accountName, containerName, blobName); if (!ignoreSnapshotTime && this.SnapshotTime != null) { canonicalName += "?snapshot=" + BlobRequest.ConvertDateTimeToSnapshotString(this.SnapshotTime.Value); } return(canonicalName); }