Ядро asp.net загружает файл как часть формы - PullRequest
0 голосов
/ 21 марта 2019

Пытаетесь загрузить файл как часть формы и сохранить его в папке в wwwroot, а затем сохранить URL-адрес файла в таблице базы данных сервера sql вместе с другими деталями формы?Если у кого-то есть идеи, это будет очень цениться.Я использовал этот код, но он ничего не хранит.Однако когда я создал новый проект, мне удалось заставить код работать над этим правильно, но, похоже, он не может заставить его работать в этом рабочем проекте.Не уверен, что это как-то связано с тем, что у меня есть репозитории, а у нового проекта, который я создал, который работал, не было репозиториев.Это единственная разница, о которой я могу думать.Есть идеи?

// Модель

namespace PostProjectEvaluations.Web.Models
{
    public partial class Projects
    {
        [Key]
        public int ProjectId { get; set; }
        [Required]
        [StringLength(300)]
        public string Name { get; set; }
        [Required]
        [StringLength(50)]
        public string Manager { get; set; }

        public string FilePath { get; set; }

    }
    public class ProjectsVM
    {
        public string Name { get; set; }
        public IFormFile File { get; set; }
    }

// Контроллер

    namespace PostProjectEvaluations.Web.Controllers
    {
        public class projectsController : Controller
        {
            private readonly IApplicationRepository ApplicationRepository;
            private readonly PostProjectEvaluationsContext _context;
            private IHostingEnvironment mxHostingEnvironment { get; set; }
            private object objproject;

            public projectsController(IApplicationRepository applicationRepository,
                IHostingEnvironment hostingEnvironment, PostProjectEvaluationsContext context)
            {
                mxHostingEnvironment = hostingEnvironment;
                ApplicationRepository = applicationRepository;
                _context = context;
            }


            public IActionResult Index()
            {
                ViewBag.dataSource = ApplicationRepository.GetAllProjects().ToList();
                var projects = ApplicationRepository.GetAllProjects();
                return View(projects);
            }

            [HttpPost]
            [ValidateAntiForgeryToken]
            public async Task<IActionResult> Index(ProjectsVM projectsVM)
            {
                if (projectsVM.File != null)
                {
                    //upload files to wwwroot
                    var fileName = Path.GetFileName(projectsVM.File.FileName);
                    var filePath = Path.Combine(mxHostingEnvironment.WebRootPath, "Uploads", fileName);


                    using (var fileSteam = new FileStream(filePath, FileMode.Create))
                    {
                        await projectsVM.File.CopyToAsync(fileSteam);
                    }
                    //your logic to save filePath to database, for example

                    Projects projects = new Projects();
                    projects.Name = projectsVM.Name;
                    projects.FilePath = filePath;

                    _context.Projects.Add(projects);
                    _context.SaveChanges();
                }
                else
                {

                }
                return View("Index");
            }
 public IActionResult Details(int id)
        {
            var project = ApplicationRepository.GetProjects(id);
            return View(project);
        }

        [HttpGet]
        public IActionResult Create()
        {

            var project = new Projects();
            return View(project);
        }

        [HttpPost]
        public IActionResult Create(Projects projects)
        {
            ApplicationRepository.Create(projects);
            return RedirectToAction("Index");

        }



        public IActionResult Delete(int id)
        {
            var project = ApplicationRepository.GetProjects(id);
            ApplicationRepository.Delete(project);
            return RedirectToAction("Index");
        }


        [HttpGet]
        public IActionResult Edit(int id)
        {
            var project = ApplicationRepository.GetProjects(id);
            //mxApplicationRepository.SaveChangesAsync();
            return View(project);
        }
        [HttpPost]
        public IActionResult Edit(Projects projects)
        {
            ApplicationRepository.Edit(projects);
            //mxApplicationRepository.SaveChangesAsync();
            return RedirectToAction("Index");
        }


    }

}

// Вид

      <form enctype="multipart/form-data" asp-controller="Projects" asp-action="Create" method="post" class="form-horizontal">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-body">
                <h3 class="form-section">Project Info</h3>
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <label class="control-label col-md-3">Project Name</label>
                            <div class="col-md-9">
                                <input asp-for="Name" class="form-control" placeholder="Name">
                                <span asp-validation-for="Name" class="text-danger"></span>
                            </div>
                        </div>
                    </div>
                    <!--/span-->
                    <div class="col-md-6">
                        <div class="form-group">
                            <label class="control-label col-md-3">Project Manager</label>
                            <div class="col-md-9">
                                <input asp-for="Manager" class="form-control" placeholder="Name">
                            </div>
                        </div>
                    </div>
                    <!--/span-->
                </div>

                <!--/span-->
            </div>
            <h3 class="form-section">Project Files</h3>
            <!--/row-->
            <div class="row">
                <div>
                    <div class="col-md-6">
                        <div class="col-md-10">
                            <p>Upload one or more files using this form:</p>
                            <input type="file" name="files" multiple />
                        </div>
                    </div>
                </div>
                <div>
                </div>
                </div>

                <div class="form-actions right">
                    <input type="submit" class="btn blue-assembly" name="submitButton" value="Save" />
                    <a asp-action="Index" class="btn default" onclick="cancelClick()">Cancel</a>
                </div>
</form>

1 Ответ

0 голосов
/ 22 марта 2019

Вы можете использовать IFormFile для получения файла. А затем сохранить URL-адрес пути к файлу в вашей базе данных, используя ядро ​​EF.Не забудьте создать папку myFiles, в которой сначала будут сохранены загруженные файлы в wwwroot.

Вы можете обратиться к руководству по Загрузка файлов в ASP.NET Core

Ниже приведена простая демонстрация:

Модели:

public class Engineer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string FilePath { get; set; }
}
public class EngineerVM
{
    public string Name { get; set; }
    public IFormFile File{ get; set; }
}

Вид:

@model EngineerVM
<form method="post" enctype="multipart/form-data" asp-controller="Home" asp-action="Index">
<div class="form-group">
    <div class="col-md-10">
        <input type="text" asp-for="Name" />
    </div>
    <div class="col-md-10">
        <p>Upload one or more files using this form:</p>
        <input type="file" name="file"/>
    </div>
</div>
<div class="form-group">
    <div class="col-md-10">
        <input type="submit" value="Save" />
    </div>
</div>
</form>

Контроллер:

public class HomeController : Controller
{
    private readonly IHostingEnvironment _hostingEnv;
    private readonly ApplicationDbContext _context;

    public HomeController(IHostingEnvironment hostingEnv,ApplicationDbContext context)
    {
        _hostingEnv = hostingEnv;
        _context = context;
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Index(EngineerVM engineerVM)
    {
        if (engineerVM.File != null)
        {
            //upload files to wwwroot
            var fileName = Path.GetFileName(engineerVM.File.FileName);
            var filePath = Path.Combine(_hostingEnv.WebRootPath, "images", fileName);

            using (var fileSteam = new FileStream(filePath, FileMode.Create))
            {
                await engineerVM.File.CopyToAsync(fileSteam);
            }
            //your logic to save filePath to database, for example

            Engineer engineer = new Engineer();
            engineer.Name = engineerVM.Name;
            engineer.FilePath = filePath;

            _context.Engineers.Add(engineer);
            await _context.SaveChangesAsync();
        }
        else
        {

        }
        return View();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...