Snootalogue/Pages/Upload.cshtml.cs

70 lines
1.9 KiB
C#

using Microsoft.AspNetCore.Mvc.RazorPages;
using Snootalogue.Data;
using Microsoft.AspNetCore.Mvc;
using System.Net;
using System.Linq;
using System.IO;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Snootalogue.ViewModels;
using Snootalogue.Models;
namespace Snootalogue.Pages {
public class UploadModel : PageModel {
private readonly SnootalogueContext _context;
[BindProperty]
public UploadDocument ud { get; set; }
public UploadModel(SnootalogueContext context) {
_context = context;
}
[HttpPost]
// [DisableFormValueModelBinding]
// [ValidateAntiForgeryToken]
public async Task<IActionResult> OnPostAsync(UploadDocument ud) {
if (!ModelState.IsValid) {
return Page();
}
if (ud.UploadedFile == null) {
return Page();
}
var id = Document.NewID(_context);
// var uploadDirectory = Path.Combine(filename);
var uploadDirectory = Path.Combine("wwwroot", "Content");
var destination = Path.Combine(uploadDirectory, $"{id}.pdf");
using (var fs = new FileStream(destination, FileMode.Create)) {
await ud.UploadedFile.CopyToAsync(fs);
}
// Document d = _context.Document.
Document d = new Document {
ID = id,
Title = ud.Title,
Authors = ud.Authors.Split(",").ToList<string>(),
Category = ud.Category,
Tags = string.IsNullOrWhiteSpace(ud.Tags) ? null : ud.Tags.Split(",").ToList<string>(),
Notes = ud.Notes,
Read = ud.Read,
Filename = WebUtility.HtmlEncode(ud.UploadedFile.FileName)
};
_context.Document.Add(d);
try {
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException e) {
// TODO: handle it like https://github.com/dotnet/AspNetCore.Docs/blob/master/aspnetcore/tutorials/razor-pages/razor-pages-start/sample/RazorPagesMovie30/Pages/Movies/Edit.cshtml.cs#L56
throw e;
}
return RedirectToPage("/Index");
}
}
}