Как загрузить несколько файлов в хранилище BLOB-объектов в DotNetCore - PullRequest
0 голосов
/ 27 апреля 2020

Я могу загрузить один текстовый файл, когда я пытаюсь загрузить несколько файлов, при этом используется только один файл. Может ли кто-нибудь помочь мне загрузить несколько текстовых файлов:

public DemoController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

Мой метод создания:

  public async Task<IActionResult> Create(IFormFile files)
    {
        string blobstorageconnection = _configuration.GetValue<string>("blobstorage");

        byte[] dataFiles;

        CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(blobstorageconnection);

        CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();

        CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("demodata");

        BlobContainerPermissions permissions = new BlobContainerPermissions
        {
            PublicAccess = BlobContainerPublicAccessType.Blob
        };
        string systemFileName = files.FileName;
        await cloudBlobContainer.SetPermissionsAsync(permissions);
        await using (var target = new MemoryStream())
        {
            files.CopyTo(target);
            dataFiles = target.ToArray();
            Console.WriteLine("upload files Successfully");
        }

        CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(systemFileName);
        await cloudBlockBlob.UploadFromByteArrayAsync(dataFiles, 0, dataFiles.Length);

        return View();
    }

My View: (Create.cs html)

 @{
ViewData["Title"] = "Create";

}

 <div class="row">
<div class="col-md-6">
    <form method="post" enctype="multipart/form-data" asp-controller="Demo" asp-action="Create">
        <div class="form-group">
            <label> Select File </label>
            <input class="form-control" name="files" multiple="multiple" type="file" />
        </div>
        <div class="form-group">
            <input class="btn btn-success" type="submit" value="Submit" id="demo" text="Succcessfully Uploaded" />

        </div>
    </form>
</div>

1 Ответ

1 голос
/ 27 апреля 2020

Пожалуйста, попробуйте что-то вроде следующего (непроверенный код):

    public async Task<IActionResult> Create(List<IFormFile> files)
    {
        string blobstorageconnection = _configuration.GetValue<string>("blobstorage");

        CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(blobstorageconnection);

        CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();

        CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("demodata");

        BlobContainerPermissions permissions = new BlobContainerPermissions
        {
            PublicAccess = BlobContainerPublicAccessType.Blob
        };

        await cloudBlobContainer.SetPermissionsAsync(permissions);

        foreach (var formFile in files)
        {
            byte[] data;
            string systemFileName = formFile.FileName;
            await using (var target = new MemoryStream())
            {
                formFile.CopyTo(target);
                data = target.ToArray();
                CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(systemFileName);
                await cloudBlockBlob.UploadFromByteArrayAsync(data, 0, data.Length);
            }
        }

        return View();
    }

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

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