Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как upload файл через ajax? / 7 сообщений из 7, страница 1 из 1
14.08.2019, 15:57
    #39849325
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как upload файл через ajax?
ASP.NET Core .

Юзер грузит файл в базу в виде текста.
Так он выбирает какой файл грузить:

Код: html
1.
<input type="file" id="script_to_upload"name="files">



Как далее по кнопке загрузить файл?

Нашел такое:
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-2.2

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
[HttpPost("UploadFiles")]
public async Task<IActionResult> Post(List<IFormFile> files)
{
    long size = files.Sum(f => f.Length);

    // full path to file in temp location
    var filePath = Path.GetTempFileName();

    foreach (var formFile in files)
    {
        if (formFile.Length > 0)
        {
            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await formFile.CopyToAsync(stream);
            }
        }
    }

    return Ok(new { count = files.Count, size, filePath});
}



но мне надо при аплоаде передать еще пару своих параметров, укзать куда в базе грузить файл, а этот метод не предполагает, я так понял, парметры.

Поэтому решил грузить через вызов Ajax метода по кнопке.
Как сделать загрузку файла через ajax метод?
...
Рейтинг: 0 / 0
14.08.2019, 17:07
    #39849374
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как upload файл через ajax?
Сделал так, метод контроллера вызывается, но в нем невозможно достать Request.Form
Что изменить?


Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
function DoUpload() {
                if (window.FormData !== undefined) {
                    var fileUpload = $("#script_to_upload").get(0);
                    var files = fileUpload.files;

                    var fileData = new FormData();

                    // Looping over all files and add it to FormData object  
                    for (var i = 0; i < files.length; i++) {
                        fileData.append(files[i].name, files[i]);
                    }

                    fileData.append('parent_id', 'Vasya');
                    fileData.append('username', 'Zelya');

                    $.ajax({
                        url: '/Db/UploadScript',
                        type: "POST",
                        contentType: false, // Not to set any content header  
                        processData: false, // Not to process data  
                        data: fileData,
                        dataType: 'json',
                        success: function (result) {
                            alert(result);
                        },
                        error: function (err) {
                            alert(err.statusText);
                        }
                    });
                } else {
                    alert("FormData is not supported.");
                }  
            }


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 [HttpPost]
        public ActionResult UploadScript()
        {
            string Name = "Kuku";
            try
            {
                var files = HttpContext.Request.Form.Files; //<--- улетает

                Name = Request.Form["username"];//<---улетает
            }
            catch(Exception x)
            {
                Console.WriteLine(x.Message);
            }

            return Content("OK");
        }
...
Рейтинг: 0 / 0
14.08.2019, 19:21
    #39849451
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как upload файл через ajax?
Вопрос снят.
...
Рейтинг: 0 / 0
14.08.2019, 20:40
    #39849482
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как upload файл через ajax?
там ж прост обращение к модели можно сделать в контролере..зачем сложности с формой и ручным методом.
...
Рейтинг: 0 / 0
15.08.2019, 11:26
    #39849654
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как upload файл через ajax?
handmadeFromRuтам ж прост обращение к модели можно сделать в контролере..зачем сложности с формой и ручным методом.

Мне надо передать дополнительные параметры в контроллер, кроме списка файлов, например:
я гружу файлы не на диск сервера, а в базу, и надо укзазать в каоке место в базе загружать, еще 2-3 параметра.
А метод контроллера я так понял предполагает только список файлов.
...
Рейтинг: 0 / 0
15.08.2019, 11:50
    #39849682
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как upload файл через ajax?
Ролг ХупинhandmadeFromRuтам ж прост обращение к модели можно сделать в контролере..зачем сложности с формой и ручным методом.

Мне надо передать дополнительные параметры в контроллер, кроме списка файлов, например:
я гружу файлы не на диск сервера, а в базу, и надо укзазать в каоке место в базе загружать, еще 2-3 параметра.
А метод контроллера я так понял предполагает только список файлов.

нет такого ограничения. делай модель на js тоже самое по сути
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public class PersonViewModel
{
    public string Name { get; set; }
    public IFormFile Avatar { get; set; }
}
<form asp-action="Create" asp-controller="Home" method="post" enctype="multipart/form-data">
    <p>
        <label>Имя</label>
        <input name="Name" class="form-control" />
    </p>
    <p>
        <label>Аватар</label>
        <input name="Avatar" type="file" class="form-control" />
    </p>
    <p>
        <input type="submit" value="Добавить" />
    </p>
</form>
...
Рейтинг: 0 / 0
15.08.2019, 12:22
    #39849709
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как upload файл через ajax?
Ролг Хупин,

.. примерно, как и выше, только если коллекция файлов загружается, то у меня вот так работает:

модель
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class SendParams
    {
        public string UserLogin { get; set; }        
        public string AddressTo { get; set; }
        public string Body { get; set; }
        public string Subject { get; set; }
        public IEnumerable<IFormFile> myfiles { get; set; }
    }



в контроллере

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
[HttpPost]
        public IActionResult SendMessage([FromForm] SendParams messparams)
        {
            var message = new MimeMessage();
            message.From.Add(new MailboxAddress(messparams.UserLogin));
            message.To.Add(new MailboxAddress(messparams.AddressTo));
            message.Subject = messparams.Subject;
            /// ...
            var myfiles = HttpContext.Request.Form.Files;
            if (myfiles.Count() > 0)
            {
                foreach (var myfile in myfiles)
                {
                    var attachment = new MimePart(myfile.ContentType)
                    {
                        Content = new MimeContent(myfile.OpenReadStream(), ContentEncoding.Default),                      
                        
                        FileName = myfile.FileName
                    };
                    multipart.Add(attachment);
                }
            }
     }



в JS

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
let formData = new FormData();
      formData.append("AddressTo", this.email);
      formData.append("Body", this.body);
      formData.append("Subject", this.subject);
      formData.append("UserLogin", this.myUser.UserLogin);
      
      for (var i = 0; i < this.files.length; i++) {
        let file = this.files[i];
        formData.append("myfiles[" + i + "]", file);
      }



.. где-то так
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как upload файл через ajax? / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]