IFormFile как свойство класса в веб-API - PullRequest
0 голосов
/ 01 июля 2019

Я отправляю файл из jquery ajax в основной веб-интерфейс asp.net, но веб-интерфейс принимает все свойства как нулевые.

public class YuklenecekDosya 
{
    public IFormFile File { get; set; }
    public int ID { get; }
    public string TableAdi { get; }
}

[HttpPost]
    public IActionResult Upload([FromForm]YuklenecekDosya File)
    {
        var file = File.File;

        if (file == null || file.Length == 0)
            return Content("Yuklenecek fayl Secmemisiniz!");

        if (file.Length > 0)
        {
            string path = Path.Combine(_env.WebRootPath, "Dosyalar");
            string fullfilepath = Path.Combine(path, file.FileName);

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }



            using (var fs=new FileStream(fullfilepath, FileMode.Create))
            {
                file.CopyTo(fs);
            }

            return new OkObjectResult(file);
        }

        return BadRequest();
    }

и код клинсайда ajax, как показано ниже:

let f=new FormData();
    f.append('File',$('input').files[0]);


    let File={
        File:f,
        iD:2,
        tableAdi:"Table1"
    };

    $.ajax({
        method:'Post',
        url:'api/Values/Upload',
        data:File,
        processData:false,
        contentType:false,
        enctype: 'multipart/form-data',
    }).then(model=>{
        console.log(model);
    });

когда я его отлаживаю, все в параметре YuklenecekDosya дает ноль. Я не могу понять, где проблема. кстати, когда я пытаюсь использовать параметр как просто IFormFile, а не YuklenecekDosya, он работает, но когда я беру IFormFile в качестве свойства параметра YuklenecekDosya, он дает все свойства null

Ответы [ 2 ]

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

Ключевая проблема заключается в том, что вы не предоставляете реализацию set для своей собственности, пожалуйста, измените свой класс YuklenecekDosya на:

public class YuklenecekDosya
{
    public IFormFile File { get; set; }
    public int ID { get; set; }
    public string TableAdi { get; set; }
}

Затем измените свой код JavaScript, например:

let f = new FormData();
f.append('File', $('input').files[0]);
f.append('ID', 2);
f.append('TableAdi', 'Table1');

$.ajax({
    method: 'Post',
    url: '../api/Values/Upload',
    data: f,
    processData: false,
    contentType: false,

}).then(model => {
    console.log(model);
});

Кроме того, если ваша разметка имеет вид:

<input type="file" name="files"  id="files" >

В javascript вы можете получить файл, используя:

let f = new FormData();
f.append('File', $('#files').get(0).files[0]);
0 голосов
/ 01 июля 2019

Попробуйте это:

Таким образом, $ajax вызов будет:

let f = new FormData();
f.append('File', $('input').files[0]);
f.append('ID', 2);
f.append('TableAdi', 'Table1');

$.ajax({
    method: 'Post',
    url: 'api/Values/Upload',
    data: f, <-- Here pass f
    processData: false,
    contentType: false,
    enctype: 'multipart/form-data',
}).then(model => {
    console.log(model);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...