Несколько загрузок файлов с использованием BeginCollectionItem
У меня есть сайт, который использует BeginCollectionItem для создания новых шагов процесса, и на каждом шаге процесса есть загрузка файла. В идеале я хотел бы, чтобы закачки файлов сохранялись в разных контейнерах, поскольку это облегчит задачу, когда мне потребуется загрузить файлы.
Однако в данный момент он создает контейнер для каждого элемента коллекции, но он помещает все файлы в каждый из них, и я ожидаю, что он поместит каждый файл в соответствующий контейнер.
Для хранения мы используем учетные записи хранения Azure.
Код ниже:
Частичный вид:
@using (Html.BeginCollectionItem("SectionInfo"))
{
<div class="col-12 value-top pad-top">
<input class="hidden-value" value="" name="SectionInfo[@ViewData["ContainerNoNum"]].valuematch">
<h3>Due Date</h3>
@Html.EditorFor(m => m.DueDate)
</div>
<div class="col-12 pad-top">
<h3>Add files</h3>
<input type="file" name="files" multiple="multiple">
</div>
<div class="col-12 pad-top">
<h3>External Document Link</h3>
@Html.TextBoxFor(m => m.ExternalDocument)
</div>
}
контроллер:
[HttpPost]
public async Task<IActionResult> InstanceProcess(List<IFormFile> files, string InstanceId, [Bind(Prefix = "SectionInfo")]IEnumerable<ProcessOutput> secinf)
{
if (files.Count() > 0)
{
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(getid);
await container.CreateIfNotExistsAsync();
await container.SetPermissionsAsync(new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
});
foreach (var item in secinf)
{
foreach (var file in files)
{
CloudBlockBlob blockBlob = container.GetBlockBlobReference(item.valuematch +file.FileName);
await blockBlob.UploadFromStreamAsync(file.OpenReadStream());
}
}
}
_context.SaveChanges();
}