Список содержимого контейнера с хранилищем BLOB-объектов Azure

Я создаю приложение для облачного хранилища, используя ASP.NET MVC, написанное на C#. В настоящее время я могу загружать файлы в контейнер больших двоичных объектов хранилища Azure, но имя каждого файла отображается как слово «изображения» на самой странице загрузки. Имена файлов верны в Azure.

Я хочу отображать фактическое имя файла, а не слово «изображения».

Вот что сейчас отображается после загрузки файла

Фрагмент кода из моего контроллера:

    public ActionResult Upload()
    {
        // Retrieve storage account from connection string.
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
            CloudConfigurationManager.GetSetting("AzureString"));

        // Create the blob client.
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

        CloudBlobContainer blobContainer = blobClient.GetContainerReference("Container");

        List<string> blobs = new List<string>();
        foreach (var blobItem in blobContainer.ListBlobs())
        {
            blobs.Add(blobItem.Uri.ToString());
        }
        return View(blobs);
    }

    [HttpPost]
    public ActionResult Upload(HttpPostedFileBase image)
    {
        if (image.ContentLength > 0)
        {
            // Retrieve storage account from connection string.
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
                CloudConfigurationManager.GetSetting("AzureString"));

            // Create the blob client.
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            // Retrieve a reference to a container.
            CloudBlobContainer blobContainer = blobClient.GetContainerReference("Container");

            CloudBlockBlob blob = blobContainer.GetBlockBlobReference(image.FileName);
            blob.UploadFromStream(image.InputStream);
        }
        return RedirectToAction("Upload");
    }

Соответствующее представление:

    @{
        ViewBag.Title = "Upload";
    }

    @if (Request.IsAuthenticated)
    {
        <h2>Upload</h2>
        <p>
            @using (Html.BeginForm("Upload", "Files", FormMethod.Post, new { enctype = "multipart/form-data" }))
            {
                <input type="file" name="image" />
                <input type="submit" value="Upload" />
            }
        </p>
        <ul style="list-style-type: none; padding:0">
            @foreach (var item in Model)
            {
                <li>
                    <img src="@item" alt="images" width="100" height="100" />
                    <a id="@item" href="#" onclick="deleteImage('@item');">Delete</a>
                </li>
            }
        </ul>

        <script>
        function deleteImage(item)
        {
            var url = "/Files/DeleteImage";
            $.post(url, {Name: item}, function (data) {
            window.location.href = "/Files/Upload";
            alert(data);
            })
        }
        </script>
    }
    else
    {
        <ul class="nav navbar-nav navbar-right">
            <li>@Html.ActionLink("Register", "Register", "Account", routeValues: null, htmlAttributes: new { id = "registerLink" })</li>
            <li>@Html.ActionLink("Log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
        </ul>
    }

Заранее извиняюсь, если это простая ошибка. Я новичок в ASP.NET, C# и Azure.


person samule    schedule 29.03.2016    source источник
comment
Каково результирующее значение src тега img? Настроен ли ваш контейнер для общего доступа для чтения?   -  person Ivan Gritsenko    schedule 29.03.2016
comment
Вероятно, вы видите слово «изображения», потому что это альтернативный текст для неработающего изображения. Как сказал Иван, опубликуйте визуализированный вывод (источник html) и убедитесь, что контейнер читаем, или используйте URL-адрес SAS.   -  person Bryan Lewis    schedule 29.03.2016


Ответы (1)


Удалось заставить его работать, сделав контейнер общедоступным.

container.SetPermissions(
new BlobContainerPermissions 
    { PublicAccess = BlobContainerPublicAccessType.Blob});
person samule    schedule 29.03.2016
comment
Если этот контейнер действительно должен быть частным, посмотрите на SAS: azure.microsoft.com/en-us/documentation/articles/ - person Bryan Lewis; 29.03.2016