Загрузка файла с использованием приложения activ + asp.net core 2 не работает - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь выполнить функцию загрузки файла, где мой интерфейс содержит реакции , а сервер - asp.net core 2 . Я пробовал с различными комбинациями, но мой код не работает. (Ошибка на конце сервера и, скорее всего, ошибка типа контента). Ниже приведены фрагменты для интерфейса и сервера:

Код реакции:

const formData: any = new FormData();<br />
formData.append("File",data[0]); // data[0] contains the file object<br/>
return axios.post(SAVE_ATTACHMENT_DATA, formData, 
    {headers: { 'Content-Type':'multipart/form-data' }}
  )
      .then(resp => {
        // 
      }, err => {
        // 
      })
  };

Код ASP.NET Core 2:

[HttpPost]
[Route("upload")]
public async Task<IActionResult> Upload()
{
    var files = Request.Form.Files; // getting error here in "Form"
    FileUploadViewModel model = new FileUploadViewModel(); // model been defined in another file
    var file = model.File;

     if (file.Length > 0)
     {
         string path = Path.Combine(@"temp\", "uploadFiles");
         using (var fs = new FileStream(Path.Combine(path, file.FileName), FileMode.Create))
         {
             await file.CopyToAsync(fs);
         }

          model.source = $"/uploadFiles{file.FileName}";
          model.Extension = Path.GetExtension(file.FileName).Substring(1);
     }
            return BadRequest();
}

Может кто-нибудь, пожалуйста, помогите мне с тем же.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Должно работать так:

Код реакции

    const formData = new FormData();
    formData.append("file", data[0]);
    return axios.post(SAVE_ATTACHMENT_DATA, formData)

ASP.NET Core 2:

[HttpPost]
[Route("upload")]
public async Task<IActionResult> Upload(IFormFile file)
{

     if (file.Length > 0)
     {
         string path = Path.Combine(@"temp\", "uploadFiles");
         using (var fs = new FileStream(Path.Combine(path, file.FileName), FileMode.Create))
         {
             await file.CopyToAsync(fs);
         }

          model.source = $"/uploadFiles{file.FileName}";
          model.Extension = Path.GetExtension(file.FileName).Substring(1);
     }
     return BadRequest();
}

Внимание! Имя файла в React должно совпадать с именем параметра в методе .NET Core, иначе IFormFile будет нулевым. Например, formData.append('sameName', data[0]); в React и IFormFile sameName в .NET Core.

0 голосов
/ 11 сентября 2018

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

[HttpPost]
[Route("upload")]
public async Task<IActionResult> Upload(FileUploadViewModel model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...