Как сохранить картинку в azure хранилище BLOB-объектов в приложении asp. net mvc? - PullRequest
0 голосов
/ 10 марта 2020

В настоящее время я работаю над приложением ASP. Net, в котором хранится информация о студентах. Мне необходимо хранить следующую информацию:

  • Номер студента
  • Имя
  • Адрес электронной почты
  • Домашний адрес
  • Контакт №
  • Загрузить фотографию студента
  • isActive флаг, чтобы указать, активен студент или нет

Эта информация хранится в базе данных документов и фотография студента должна быть загружена в Azure хранилище BLOB-объектов при возврате ссылки изображения в базу данных документов

Как мне это сделать?

В настоящее время у меня есть класс для Информация о студентах, которая выглядит следующим образом:

public class Student
{
    [Key]
    public int StudentId { get; set; }

    [Required]
    [StringLength(8, MinimumLength = 8)]
    [DisplayName("Student Number")]
    public string StudentNo { get; set; }

    [Required]
    [StringLength(50, MinimumLength = 1)]
    [DisplayName("First Name")]
    public string FirstName { get; set; }

    [Required]
    [StringLength(50, MinimumLength = 1)]
    [DisplayName("Last Name")]
    public string LastName { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    [DisplayName("Email Address")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, MinimumLength = 5)]
    [DataType(DataType.MultilineText)]
    [DisplayName("Home Address")]
    public string HomeAddress { get; set; }

    [Required]
    [DataType(DataType.PhoneNumber)]
    [StringLength(10)]
    [DisplayName("Mobile No.")]
    public string Mobile { get; set; }

    public bool IsActive { get; set; }
}

У меня есть отдельная модель представления для BLOB-объекта, поскольку я все еще экспериментировал с BLOB-объектами:

 public class BlobViewModel
{

    public string BlobContainerName { get; set; }
    public string StorageUri { get; set; }
    public string ActualFileName { get; set; }
    public string PrimaryUri { get; set; }
    public string fileExtension { get; set; }

    public string FileNameWithoutExt
    {
        get
        {
            return Path.GetFileNameWithoutExtension(ActualFileName);
        }
    }

    public string FileNameExtensionOnly
    {
        get
        {
            return System.IO.Path.GetExtension(ActualFileName).Substring(1);
        }
    }

Как мне объединить эти 2 так, чтобы я могу загрузить изображение для студента, которое будет сохранено в BLOB-объекте при возврате URI в класс студента?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Во-первых, вам нужно создать azure учетную запись хранения и контейнер под ней из azure portal. Затем вы можете создать метод, как показано ниже. Вы можете сохранить файл в папке под уникальным именем файла в azure хранилище BLOB-объектов и сохраните имя файла в вашей базе данных SQL. Доступ к сохраненному файлу можно получить, передав информацию о целевой папке и уникальное имя файла.

Updload File:

    public static void UploadBlob(string targetfolder, string fileName, FileStream fileStream)
    {
        try
        {
            if (!string.IsNullOrWhiteSpace(fileName) && fileStream != null)
            {
                string storageConnection = CloudConfigurationManager.GetSetting("your storage connection string");
                CloudStorageAccount StorageAccount = CloudStorageAccount.Parse(storageConnection);
                CloudBlobClient BlobClient = StorageAccount.CreateCloudBlobClient();
                CloudBlobContainer cloudBlobContainer = BlobClient.GetContainerReference("your container name");

                CloudBlockBlob blockBlob = cloudBlobContainer.GetBlockBlobReference(targetFolder + fileName);

                blockBlob.UploadFromStream(fileStream);
            }
        }
        catch (Exception ex)
        {
            throw new Exception("File Upload Failed");
        }
    }

Download File:

    public ActionResult DownloadFile()
        {

            Stream stream =DownloadFilelob(targetFolder,fileName)
            return File(stream, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
        }


public Stream DownloadFileBlob(string targetFolder, string fileName)
{
    try
    {
        if (!string.IsNullOrWhiteSpace(fileName))
        {
            string storageConnection = CloudConfigurationManager.GetSetting("your storage connection string");
            CloudStorageAccount StorageAccount = CloudStorageAccount.Parse(storageConnection);
            CloudBlobClient BlobClient = StorageAccount.CreateCloudBlobClient();
            CloudBlobContainer cloudBlobContainer = BlobClient.GetContainerReference("your container name");

            CloudBlockBlob blockBlob = cloudBlobContainer.GetBlockBlobReference(targetFolder + fileName);

    return blockBlob.OpenRead()
        }
    }
    catch (Exception ex)
    {
        throw new Exception("File Download Failed");
    }
}
0 голосов
/ 10 марта 2020

Использование Azure CosmosDB для хранения может помочь. С CosmosDB вы можете легко сохранить изображение в виде вложения в документ студента: https://docs.microsoft.com/en-us/rest/api/cosmos-db/attachments

Если вы не планируете использовать CosmosDB, уточните, пожалуйста, о хранилище базы данных .

...