2016-03-29 3 views
0

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

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

Here is what it currently displays after a file is uploaded

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

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.

+0

Что такое полученное 'src' значение' img' тега? Контейнер сконфигурирован для доступа к общедоступному доступу? –

+0

Вероятно, вы видите слово «изображения», потому что это текст alt для сломанного изображения. Как сказал Иван, опубликуйте полученный вывод (источник html) и убедитесь, что контейнер доступен для чтения или использует URL-адрес SAS. –

ответ

0

был в состоянии получить его работу, сделав контейнер для публичного просмотра

container.SetPermissions(
new BlobContainerPermissions 
    { PublicAccess = BlobContainerPublicAccessType.Blob}); 
+0

Если этот контейнер действительно должен быть закрытым, ознакомьтесь с SAS: https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-shared-access-signature-part-2/ –