Как получить данные включенного файла в ядро ​​asp.net? - PullRequest
0 голосов
/ 21 июня 2019

Какую модель мне использовать для получения данных js, включая объект File и строку, от клиента?Или какой тип данных мне следует использовать для объекта File на главном сервере asp.net?

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Какую модель мне следует использовать для получения данных js, включая объект File и строку

ASP Net Core имеет контейнер IFormFile для этой цели. Данные хранятся внутри как поток.

Ваша подпись действия для строки и файла будет выглядеть так:

public IActionResult Action(IFormFile file, string name) { }

Обратите внимание, что имена параметров должны совпадать с именами данных формы, которые вы используете в javascript. То есть,

const fd = new FormData()
fd.append('file' , file)
fd.append('name', 'some string')

В этой документации приведены полные примеры использования.

0 голосов
/ 21 июня 2019

Используйте ViewModel, чтобы получить файл и строку, и отправьте форму непосредственно для публикации этих данных. Примечание: добавьте enctype="multipart/form-data" в Form, если хотите отправить файлы

 public class TestViewModel
{
    public string Name { get; set; }
    public IFormFile file { get; set; }
}

<div class="row">
  <div class="col-md-4">
    <form asp-action="UploadFile"  enctype="multipart/form-data">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="Name" class="control-label"></label>
            <input asp-for="Name"  class="form-control" />
            <span asp-validation-for="Name" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input asp-for="file" class="form-control" />
        </div>

        <div class="form-group">
            <input type="submit" id="btnSubmit" value="Create" class="btn btn-default" />
        </div>
    </form>
  </div>
   <span id="result"></span>
</div>

Если вы хотите отправить данные формы с помощью js, вы можете добавить id="fileUploadForm" и попробовать JavaScript, как показано ниже

@section Scripts
{
<script type="text/javascript">

    $(document).ready(function () {

        $("#btnSubmit").click(function (event) {

            //stop submit the form, we will post it manually.
            event.preventDefault();

            // Get form
            var form = $('#fileUploadForm')[0];

            // Create an FormData object 
            var data = new FormData(form);

            // If you want to add an extra field for the FormData
            data.append("CustomField", "This is some extra data, testing");

            // disabled the submit button
            $("#btnSubmit").prop("disabled", true);

            $.ajax({
                type: "POST",
                //enctype: 'multipart/form-data',
                url: "/Home/UploadFile",
                data: data,
                processData: false,
                contentType: false,
                cache: false,
                timeout: 600000,
                success: function (data) {

                    $("#result").text(data);
                    console.log("SUCCESS : ", data);
                    $("#btnSubmit").prop("disabled", false);

                },
                error: function (e) {

                    $("#result").text(e.responseText);
                    console.log("ERROR : ", e);
                    $("#btnSubmit").prop("disabled", false);

                }
            });

        });

    });
</script>
}

Контроллер

 [HttpPost]
 public async Task<ActionResult> UploadFile(TestViewModel data)
  { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...