我有一个私有的Azure Blob。我正在尝试将 Azure 文件复制到 Blob。它们都位于同一存储帐户中。
当我尝试将 Azure 文件复制到 Blob 时,我得到的是 404。
例如:await destinationBlob.StartCopyAsync(sourceCloudFile);
假设:这是因为我需要在 Azure 文件上提供共享访问签名。
因此,我不确定如何使用 SAS 将文件复制到 Blob。
var policy = new Microsoft.WindowsAzure.Storage.File.SharedAccessFilePolicy()
{
Permissions = Microsoft.WindowsAzure.Storage.File.SharedAccessFilePermissions.List,
SharedAccessExpiryTime = new DateTimeOffset(DateTime.UtcNow.AddDays(1))
};
var sasToken = source.CloudFile.GetSharedAccessSignature(policy);
destinationBlob.Properties.ContentType = "image/jpg";
好的 - 我有令牌..现在怎么办?
请在SharedAccessFilePolicy
中更改权限。为了复制文件,权限应该是Read
而不是List
。
var policy = new Microsoft.WindowsAzure.Storage.File.SharedAccessFilePolicy()
{
Permissions = Microsoft.WindowsAzure.Storage.File.SharedAccessFilePermissions.Read,
SharedAccessExpiryTime = new DateTimeOffset(DateTime.UtcNow.AddDays(1)
};
获取 SAS 后,只需为文件创建 SAS URL,并在CloudBlockBlob
对象上调用StartCopy
。
var sasToken = source.CloudFile.GetSharedAccessSignature(policy);
var fileSasUri = new Uri(string.Format("{0}{1}", source.CloudFile.Uri.AbsoluteUri, sasToken));
var copyId = await destinationBlob.StartCopyAsync(fileSasUri);
若要设置目标 Blob 的内容类型,可以在复制完成后执行以下操作:
destinationBlob.Properties.ContentType = "image/jpg";
await destinationBlob.SetPropertiesAsync();