blueimp / jQuery-File-Upload не работает со страницами ASP.NET Core Razor - PullRequest
0 голосов
/ 05 июля 2019

Я разрабатываю веб-сайт со страницами бритвы 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>&#9989;</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.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Проверьте разницу с вашим кодом и шаги ниже:

  1. Создание шаблона Asp.Net Core Razor Page 2.1
  2. Добавьте код ниже к Index.cshtml

    <form id="fileupload" method="POST" 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="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{
        <script src="https://cdnjs.cloudflare.com/ajax/libs/blueimp-file-upload/9.32.0/js/jquery.fileupload.js"></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: 100000000
                });
            });
        </script>
    }
    
  3. PageModel

    public class IndexModel : PageModel
    {
        public void OnGet()
        {
    
        }
        public void OnPost()
        {
            var files = HttpContext.Request.Form.Files;
        }
    }
    
0 голосов
/ 07 июля 2019

Вам не хватает атрибута data-url для формы, добавьте в форму следующий атрибут.

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