Сохранение загруженных пользователем изображений в asp.net mvc - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь опубликовать загруженное изображение с внешнего интерфейса с помощью aurelia на asp.net mvc.Можно ли как-то сохранить полученное изображение в формате png в папке на сервере?

Метод Javascript, из которого я публикую данные изображения (файлы - это загруженное изображение, а id - это уникальный идентификатор изображения, который мне нужно использовать для имени файла)

saveImage(files,id) {
        var form = new FormData()
        form.append('file', files)
        form.append('ID', id)

        this.http.fetch('/api/Employees', {
            method: 'post',
            body: form
        })

        return true;
    }

ImagesController(Asp.net MVC)

using Microsoft.AspNetCore.Mvc;
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace SPAproject.Controllers
{
    public class ImagesController : Controller
    {
        [HttpPost, Route("api/[controller]")]
        public async Task<IActionResult> SaveImage()
        {
            try
            {
                var form = await Request.ReadFormAsync();
                var file = form.Files.First();

                var id = form.ElementAt(1);
                var path = "/images/" + id + ".png";
                Stream stream = file.OpenReadStream();

                return Ok(true);
            }
            catch (Exception ex)
            {
                var originalMessage = ex.Message;

                while (ex.InnerException != null)
                    ex = ex.InnerException;
                return BadRequest($"{originalMessage} | {ex.Message}");
            }
        }
    }
}
}

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я предполагаю, что вы используете ASP.NET Core, а не ASP.NET (используя Microsoft.AspNetCore.Mvc;)

Вы можете использовать новый класс в ядре asp.net, IFormFile.Это упрощает потоковые операции.

[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);
            }
        }
    }

    // process uploaded files
    // Don't rely on or trust the FileName property without validation.

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

Также вы можете найти полную документацию здесь. Загрузка файлов в ASP.NET Core :

0 голосов
/ 24 февраля 2019
string fileName = string.Format("{0}{1}", id, ".png");
var serverPath = Server.MapPath("~/images");
var path = Path.Combine(serverPath, fileName);

using (Stream inputStream = file.OpenReadStream())
using (var outputStream = new FileStream(path, FileMode.Create))
{
    // dump a stream to a file
    inputStream.CopyTo(outputStream);
}
...