我的应用程序是用C#内置的,并且一直在使用Standard gen 2版本的Azure Blob存储将文件上传到容器,但是就成功上传文件而言,我们的行为一直不一致,因此我们决定尝试使用高级版本减少延迟的版本。
在文档中,似乎没有任何建议表明在代码方面应采用不同的方法。但是,如果尝试上传,我们将收到400错误的请求。我们尝试使用Sas,但仍然遇到同样的挑战。我还尝试过手动创建容器,而不是通过代码动态创建容器,但是仍然遇到相同的问题。
以下是这两种方法的摘要,希望有人能够将我指向正确的方向
和sas
// level APIs
AccountSasBuilder sas = new AccountSasBuilder
{
// Allow access to blobs
Services = AccountSasServices.Blobs,
// Allow access to the service level APIs
ResourceTypes = AccountSasResourceTypes.Service,
// Access expires in 1 hour!
ExpiresOn = DateTimeOffset.UtcNow.AddHours(1)
};
// Allow read access
sas.SetPermissions(AccountSasPermissions.All);
// Create a SharedKeyCredential that we can use to sign the SAS token
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(StorageName,StorageKey);
// Build a SAS URI
UriBuilder sasUri = new UriBuilder(StorageURL);
sasUri.Query = sas.ToSasQueryParameters(credential).ToString();
// Create a client that can authenticate with the SAS URI
BlobServiceClient service = new BlobServiceClient(sasUri.Uri);
//var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["AzureWebJobsStorage"]);
//var client = storageAccount.CreateCloudBlobClient();
var blobContainer = service.GetBlobContainerClient(container);
//blobContainer.CreateIfNotExists(PublicAccessType.BlobContainer);
var blockBlob = blobContainer.GetBlobClient(file.Substring(file.LastIndexOf('/') + 1));
using (var fileStream = WaitForFile(file, FileMode.Open, FileAccess.Read, FileShare.Read))
{
var response = blockBlob.UploadAsync(fileStream).Result;
fileStream.Close();
}
没有sas
var client = storageAccount.CreateCloudBlobClient();
var blobContainer = client.GetContainerReference(container);
blobContainer.CreateIfNotExists(BlobContainerPublicAccessType.Blob);
var blockBlob = blobContainer.GetBlockBlobReference(file.Substring(file.LastIndexOf('/') + 1));
using (var fileStream = WaitForFile(file, FileMode.Open, FileAccess.Read, FileShare.Read))
{
blockBlob.UploadFromStream(fileStream);
fileStream.Close();
} ```
答案 0 :(得分:0)
在不知道例外的情况下,我想您可能会处于以下情况:https://docs.microsoft.com/en-us/rest/api/storageservices/using-blob-service-operations-with-azure-premium-storage
Premium GPv2帐户不支持阻止Blob或文件,表和队列服务。
您可能想尝试使用premium BlockBlobStorage
:
但是,高级BlockBlobStorage帐户确实支持阻止和附加Blob。
如果不是,请尝试捕获异常。自定义例外包含HttpStatusMessage
属性中的RequestInformation
,您将在其中找到错误的请求案例。
答案 1 :(得分:0)
错误代码对应于
BlockListTooLong错误请求(400)阻止列表可能不包含更多请求 超过50,000个区块。
此处列出了其他错误代码:
https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes
您需要通过减小上载的块Blob大小来修复错误。