Я разрабатываю веб-сайт со страницами бритвы asp.net core 2.1, где пользователь может добавить несколько файлов мультимедиа на сайт или выбрать файлы, нажав на кнопку, чтобы загрузить файлы на сервер.
Затем файлы отображаются на странице с именем и другими атрибутами. Каждый файл имеет кнопку удаления для удаления загрузки.
После того, как все файлы выбраны или удалены, пользователь нажимает кнопку отправки, и все файлы будут отправлены вместе с несколькими полями формы на сервер.
Проблема в том, что на сервер не было отправлено ни одного файла. Отображение на веб-сайте с большими пальцами правильное, но после отправки HttpContext.Request.Form.Files будет пустым.
После того, как я добавил опцию '' 'replaceFileInput: false' '', файлы, добавленные кнопкой, отправляются правильно.
Если пользователь перетаскивает файлы, они не были добавлены к объекту ввода. После отправки эти файлы не были отправлены на сервер.
Демонстрация сайта размещена на github:
https://github.com/IsibisiCoder/Asp.Net-Core-with-blueimp-jQuery-File-Upload
index.cshtml:
<form id="fileupload" method="POST" data-url="Index" enctype="multipart/form-data">
<span class="btn btn-primary fileinput-button upload-button">
<span>add files...</span>
<input type="file" name="files" multiple>
</span>
<span class="fileupload-process"></span>
<!-- The table listing the files available for upload/download -->
<div id="upload-table-hide">
<div id="upload-table table-wrapper">
<div id="table-scroll">
<table role="presentation" class="table table-striped"><tbody id="uploadedfiles" class="files"></tbody></table>
</div>
</div>
</div>
<div class="form-row">
<div class="form-group col-sm-6">
<input asp-for="Value1" class="form-control" placeholder="Parameter Formdata 1" />
<span asp-validation-for="Value1" class="text-danger"></span>
</div>
<div class="form-group col-sm-6">
<input asp-for="Value2" class="form-control" placeholder="Parameter Formdata 2" />
<span asp-validation-for="Value2" class="text-danger"></span>
</div>
</div>
<div class="form-row">
<div class="col-sm-auto">
<button id="upload-button" type="submit" class="btn btn-primary upload-button start">
<span>upload</span>
</button>
</div>
</div>
</form>
@section Scripts{
<!-- The template to display files available for upload -->
<script id="template-upload" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-upload fade show">
<td>
<span class="preview"></span>
</td>
<td>
<p class="name">{%=file.name%}</p>
<strong class="error text-danger"></strong>
</td>
<td>
<p class="size">Processing...</p>
</td>
<td>
{% if (!i) { %}
<button class="btn btn-warning upload-button cancel">
<span>Löschen</span>
</button>
{% } %}
</td>
</tr>
{% } %}
</script>
<!-- The template to display files available for download -->
<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade show">
<td>
<span class="preview"></span>
</td>
<td>
<p class="name">
<span>{%=file.name%}</span>
</p>
{% if (file.error) { %}
<div><span class="label label-danger">Error</span> {%=file.error%}</div>
{% } %}
</td>
<td>
<span class="size">{%=o.formatFileSize(file.size)%}</span>
</td>
<td>
<p>✅</p>
</td>
</tr>
{% } %}
</script>
<script type="text/javascript">
$(function (e, data) {
'use strict';
// Initialize the jQuery File Upload widget:
$('#fileupload').fileupload({
// Uncomment the following to send cross-domain cookies:
//xhrFields: {withCredentials: true},
previewMaxWidth: 100000,
autoUpload: false,
replaceFileInput: false,
dataType: 'json',
singleFileUploads: false,
multipart: true,
limitMultiFileUploadSize: 10000,
paramName: 'files'
});
});
</script>
}
index.cshtml.cs
public class IndexModel : PageModel
{
[BindProperty]
public string Value1 { get; set; }
[BindProperty]
public string Value2 { get; set; }
public void OnGet()
{
}
[HttpPost]
public IActionResult OnPost(List<IFormFile> files)
{
// with parameter or httpcontext or both
var files2 = HttpContext.Request.Form.Files;
return Page();
}
}
Я нашел проект с asp.net mvc на https://github.com/ronnieoverby/blue-imp-upload-aspnet-mvc,, который работает нормально, файлы request.files заполнены. Но с ядром asp.net источник не работает.
(Update)
Я изменил описание и добавил демо к github.