尝试将Azure文件复制到Azure Blob时如何使用Azure SAS

时间:2017-03-27 06:44:19

标签: c# azure azure-storage-blobs azure-storage-files

我有一个私有Azure Blob。我试图将Azure文件复制到blob上。 它们都在同一个存储帐户中。

当我尝试将Azure文件复制到Blob时,我得到了404.

e.g。 :holder.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { String selected = holder.spinner.getSelectedItem().toString(); Log.i("selected = " , "" + selected); } @Override public void onNothingSelected(AdapterView<?> parentView) { } });

假设:这是因为我需要在Azure文件上提供Shared Access Signature

所以,我不确定如何使用SAS将文件复制到Blob。

await destinationBlob.StartCopyAsync(sourceCloudFile);

好的 - 我有令牌..现在是什么?

1 个答案:

答案 0 :(得分:2)

请更改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网址,然后在StartCopy对象上调用CloudBlockBlob

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();