Я заново создал функцию Azure, которая реализует первый упомянутый мной сценарий.URL-адрес BLOB-объекта внутри учетной записи хранения не был открыт, а контейнер и все, что в нем, настроено как личное.Поскольку я не знаю вашу схему аутентификации, я пока что пропустил ее, но вы могли бы обезопасить ее несколькими способами.
В этом коде есть несколько ярлыков, но вы поймете общую идею.Вот код:
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "files/{id}")]
HttpRequest req, string id, TraceWriter log)
{
var account = CloudStorageAccount.Parse("UseDevelopmentStorage=true");
var client = account.CreateCloudBlobClient();
var container = client.GetContainerReference("sitecontent");
var blob = container.GetBlockBlobReference(id);
var stream = new MemoryStream();
await blob.DownloadToStreamAsync(stream);
stream.Seek(0, SeekOrigin.Begin);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType =
new MediaTypeHeaderValue("application/octet-stream");
return result;
}
Я проверил его, ссылаясь на него из HTML-файла, например:
<img src="http://localhost:7071/api/files/techdays2017.jpg" alt="Me at TechDays 2017" />
Используемое изображение было 267 КБ, время отклика функции быловсе <200 мс при локальном тестировании с использованием эмулятора хранилища.</p>