2016-08-30 6 views
0
public class StorageService 
    { 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=removed for this post"); 

     public async Task Upload(string id, Stream data) 
     { 
      CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
      // Retrieve a reference to a container. 
      CloudBlobContainer container = blobClient.GetContainerReference("images"); 

      await container.CreateIfNotExistsAsync(); 

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

      // Retrieve reference to a blob named "myblob". 
      CloudBlockBlob blockBlob = container.GetBlockBlobReference(id); 

      await blockBlob.UploadFromStreamAsync(data, data.Length); 
     } 

     public async Task UploadBlogPhoto(string id, Stream data) 
     { 
      CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
      // Retrieve a reference to a container. 
      CloudBlobContainer container = blobClient.GetContainerReference("mycontainer"); 

      await container.CreateIfNotExistsAsync(); 

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

      // Retrieve reference to a blob named "myblob". 
      CloudBlockBlob blockBlob = container.GetBlockBlobReference(id); 

      await blockBlob.UploadFromStreamAsync(data, data.Length); 
     } 
    } 

Итак, у меня есть класс StorageServices, и я использую первый метод Upload, чтобы загрузить фотографии пользователей.Загрузить изображение к Azure blob с summernote

здесь разметка:

using (Html.BeginForm("UploadPhoto", "Manage", FormMethod.Post, new { enctype = "multipart/form-data" })) 
      { 
       <div class="browseimg"> 
        <input type="file" class="display-none" name="file" id="files" onchange="this.form.submit()" /> 
       </div> 
      } 
      <button class="btn btn-primary width-100p main-bg round-border-bot" id="falseFiles"> 
       Upload billede 
      </button> 

enter image description here

Это кнопка summernote для загрузки фото. Почта загружается в базу данных. Однако есть ли способ, чтобы текст был загружен в базу данных и изображение в Azure blob? Мне нужно сделать это асинхронно, сначала загрузив изображение и добавив URL-адрес лазурного пятна в summernote, можно ли это сделать?

+1

Я не использовал Summernote, так что я не знаю, как именно это работает, но с учетом Azure Blob Storage и Summernote два различных хранилищ данных, вам необходимо выполнить две операции : Один для загрузки блоба, а затем для записи в эту базу данных Summernote. Хотя вы можете выполнять обе операции только в своих функциях загрузки. Сначала загрузите изображение в хранилище blob, дождитесь его завершения и затем вставьте текст. –

ответ

1

Как сказал Гаурав, вы можете выполнять обе операции в своих функциях загрузки. По моему мнению, я рекомендую выполнить обе операции в действии загрузки, чтобы обеспечить согласованность данных. Здесь я даю вам образец кода, чтобы лучше понять его.

ManageController.cs

/// <summary> 
/// Upload photo with description 
/// </summary> 
/// <param name="imageNote">description of the photo</param> 
/// <returns></returns> 
public async Task<JsonResult> UploadPhoto(string imageNote) 
{ 
    string operationResult = string.Empty; 
    string uploadedImageUrl = string.Empty; 
    uploadedImageUrl = await UploadImageToBlob(); 
    //make sure the image is uploaded successfully to Azure Blob 
    if (!string.IsNullOrEmpty(uploadedImageUrl)) 
    { 
     //insert the image(blob) Url and imageNote to your database 
     operationResult = "Operation is successful!"; 
    } 
    else 
     operationResult = "Image upload failed, please check and submit again!"; 

    return Json(new 
    { 
     Message = operationResult 
    }); 
} 

/// <summary> 
/// Upload photo to Azure Blob Storage 
/// </summary> 
/// <returns>the new Blob(photo) Url</returns> 
private async Task<string> UploadImageToBlob() 
{ 
    string uploadedImageUrl = string.Empty; 
    try 
    { 
     var files = Request.Files; 
     if (files != null && files.Count > 0) 
     { 
      var file = files[0]; 
      string blobName = Path.GetFileName(file.FileName); 

      #region upload image to Azure Blob and retrieve the Blob Url 
      CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("brucechenStorage")); 
      CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
      // Retrieve a reference to a container. 
      CloudBlobContainer container = blobClient.GetContainerReference("images"); 
      await container.CreateIfNotExistsAsync(); 
      // Retrieve reference to a blob named "blobName". 
      CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName); 
      await blockBlob.UploadFromStreamAsync(file.InputStream); 
      uploadedImageUrl = blockBlob.Uri.ToString(); 
      #endregion 
     } 
    } 
    catch (Exception e) 
    { 
     //TODO:log 
    } 
    return uploadedImageUrl; 
} 
Смежные вопросы