Я пытаюсь создать загрузку файла с помощью ядра aspnetboilerplate .net и angular spa. Я новичок в фреймворке и мне очень нравится, но загрузка файла не работает.
Во-первых, если это можно сделать в службе без контроллера, это было бы моим предпочтительным решением.
В настоящее время я пытаюсь использовать контроллер с кодом ниже, но он не работает
Вот метод компонента .ts для загрузки файла.
upload(files) {
if (files.length === 0)
return;
const formData = new FormData();
for (let file of files)
formData.append(file.name, file);
const uploadReq = new HttpRequest('POST', `api/FileUpload/UploadFile`, formData, {
reportProgress: true,
});
this.http.request(uploadReq).subscribe(event => {
if (event.type === HttpEventType.UploadProgress)
this.progress = Math.round(100 * event.loaded / event.total);
else if (event.type === HttpEventType.Response)
this.reqMessage = event.body.toString();
});
}
Я поместил контроллер в папку контроллера веб-хостинга myapp (в ту же папку, в которой существует контроллер защиты от подделки)
Вот мой контроллер
[Route("api/[controller]")]
[ApiController]
public class FileUploadController : myappControllerBase
{
private IHostingEnvironment _hostingEnvironment;
public FileUploadController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
[HttpPost, DisableRequestSizeLimit]
public ActionResult UploadFile()
{
try
{
var file = Request.Form.Files[0];
string folderName = "Upload";
string webRootPath = _hostingEnvironment.WebRootPath;
string newPath = Path.Combine(webRootPath, folderName);
if (!Directory.Exists(newPath))
{
Directory.CreateDirectory(newPath);
}
if (file.Length > 0)
{
string fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
string fullPath = Path.Combine(newPath, fileName);
using (var stream = new FileStream(fullPath, FileMode.Create))
{
file.CopyTo(stream);
}
}
return Json("Upload Successful.");
}
catch (System.Exception ex)
{
return Json("Upload Failed: " + ex.Message);
}
}
}
Не уверен, что formData настроен правильно, но не достигает моего контроллера.