0

首先在我的web.config我添加了代码:

<appSettings>
 <add key="StorageConnectionString" value="UseDevelopmentStorage=true" />
</appSettings>

我创建了容器,如您所见,它是公开的:

在此处输入图像描述

以及要上传的代码。相同的代码适用于 Azure 帐户,但不适用于模拟器!

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("imagesproducts");

var resultList = JsonConvert.DeserializeObject<List<string>>(Images);
var urlsList = new List<String>();

for(int i = 0; i < resultList.Count; i++)
{
    byte[] singleImage = String.IsNullOrEmpty(resultList[i])? null : System.Convert.FromBase64String(resultList[i]);
    CloudBlockBlob block = container.GetBlockBlobReference(Guid.NewGuid().ToString() + ".jpg");

    using (var stream = new MemoryStream(singleImage, writable: false))
    {
        await block.UploadFromStreamAsync(stream);
    }
    urlsList.Add(block.Uri.AbsolutePath);
}
return JsonConvert.SerializeObject(urlsList);

而且我总是得到一个例外The remote server returned an error: (400) Bad Request

4

1 回答 1

0

我知道这是一个较旧的线程,但是我在研究可能节省其他时间的类似问题时发现了一些发现:

1) 确保解析出 Azure Storage Emulator 连接字符串以显示 localhost IP 端点,而不是默认的 Azure 端点。

DefaultEndpointsProtocol=http;AccountName=devstoreaccount1; AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;
BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;
TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;
QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;

2) 容器名称会导致此问题。容器有特定的命名规则。

容器名称必须是有效的 DNS 名称,符合以下命名规则:

  1. 容器名称必须以字母或数字开头,并且只能包含字母、数字和短划线 (-) 字符。
  2. 每个破折号 (-) 字符的前后必须紧跟一个字母或数字;容器名称中不允许使用连续的破折号。
  3. 容器名称中的所有字母都必须小写。
  4. 容器名称的长度必须为 3 到 63 个字符。

参考:https ://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata

于 2018-05-10T03:09:15.007 回答