public static UserFileItem ToUserFile(this IFormFile formFile, string name = null) { var subfolder = (DateTime.Now.Second % 60).ToString(); string serverFileName = Guid.NewGuid().ToString() + ".ufile"; string serverPath = Path.Combine("upload", subfolder, serverFileName); FileStream fileToWrite = new FileStream(Path.Combine(HostingEnvironment.WebRootPath, serverPath), FileMode.Create, FileAccess.Write); formFile.CopyTo(fileToWrite); fileToWrite.Close(); UserFileItem ufi = new UserFileItem() { ClientPath = formFile.FileName, VersionNumber = 1, Status = StatusType.OK, ContentType = formFile.ContentType, FileName = Path.GetFileName(formFile.FileName), ServerPath = serverPath, Size = formFile.Length, Type = Path.GetExtension(formFile.FileName), Name = name, CreationDate = DateTime.Now, }; return(ufi); }
public UserFileListViewModel(UserFileItem t) { Id = t.Id; FileName = t.FileName; ServerPath = t.ServerPath; Name = t.Name; Size = t.Size; UploadDate = t.CreationDate; DownloadCount = t.DownloadCount; Visibility = t.Visibility; }
public async Task <IActionResult> OnGetAsync(long?id, string returnUrl) { if (id == null) { return(NotFound()); } ReturnUrl = returnUrl; UserFile = await _context.Files.SingleOrDefaultAsync(m => m.Id == id); if (UserFile == null) { return(NotFound()); } return(Page()); }
private async Task <long> SaveUserFile(long?fileId, IFormFile formFile, string name) { UserFileItem userFile = null; if (fileId != null) { userFile = _context.Files.FirstOrDefault(f => f.Id == fileId); string spath = Path.Combine(_hostingEnvironment.WebRootPath, "upload", userFile.ServerPath); System.IO.File.Move(spath, spath + ".deleted"); } if (userFile == null) { userFile = new UserFileItem(); } string serverFileName = Guid.NewGuid().ToString() + ".ufile"; string serverPath = Path.Combine(_hostingEnvironment.WebRootPath, "upload", serverFileName); FileStream fileToWrite = new FileStream(serverPath, FileMode.Create, FileAccess.Write); await formFile.CopyToAsync(fileToWrite); fileToWrite.Close(); userFile.TownId = GroupItem.TownId; userFile.GroupId = GroupItem.Id; userFile.Visibility = VisibilityType.CurrentGroup; userFile.FileName = Path.GetFileName(formFile?.FileName); userFile.ContentType = formFile?.ContentType; userFile.ServerPath = serverFileName; userFile.ClientPath = formFile?.FileName; userFile.Size = formFile?.Length ?? 0; userFile.Name = name; userFile.Type = Path.GetExtension(formFile?.FileName); if (fileId != null) { _context.Attach(userFile).State = EntityState.Modified; } else { _context.Add(userFile); } await _context.SaveChangesAsync(); return(userFile.Id); }
public async Task <IActionResult> OnPostAsync() { if (!ModelState.IsValid) { return(Page()); } try { var subfolder = (DateTime.Now.Second % 10).ToString(); string serverFileName = Guid.NewGuid().ToString() + ".ufile"; string serverPath = Path.Combine(_hostingEnvironment.WebRootPath, "upload", subfolder, serverFileName); FileStream fileToWrite = new FileStream(serverPath, FileMode.Create, FileAccess.Write); await UserFile.UploadFile.CopyToAsync(fileToWrite); fileToWrite.Close(); var ufile = new UserFileItem() { TownId = UserFile.TownId, GroupId = UserFile.GroupId, Visibility = UserFile.Visibility, FileName = Path.GetFileName(UserFile.UploadFile?.FileName), ContentType = UserFile.UploadFile?.ContentType, ServerPath = Path.Combine("upload", subfolder, serverFileName), ClientPath = UserFile.UploadFile?.FileName, Size = UserFile.UploadFile?.Length ?? 0, Name = UserFile.Name, Type = Path.GetExtension(UserFile.UploadFile?.FileName), CreationDate = DateTime.Now, }; _context.Files.Add(ufile); await _context.SaveChangesAsync(); return(Redirect(Url.GetLocalUrl(ReturnUrl))); } catch (Exception) { return(NotFound()); } }
public async Task <IActionResult> OnPostAsync(long?id) { if (id == null) { return(NotFound()); } UserFile = await _context.Files.FindAsync(id); if (UserFile != null) { UserFile.DeleteFromServer(); UserFile.Status = StatusType.Deleted; await _context.SaveChangesAsync(); } return(Redirect(Url.GetLocalUrl(ReturnUrl))); }
public static string ToBase64String(this UserFileItem userFile, string waterMark = null) { if (userFile != null && userFile.Status == StatusType.OK && acceptableExt.Contains(userFile.Type)) { using (var stream = File.OpenRead(Path.Combine(HostingEnvironment.WebRootPath, userFile.ServerPath))) using (MemoryStream ms = new MemoryStream()) { stream.CopyTo(ms); if (string.IsNullOrWhiteSpace(waterMark)) { return(Convert.ToBase64String(ms.ToArray())); } using (var outStream = WaterMark.Mark(ms, waterMark, HostingEnvironment.WebRootPath + "/fonts/AdobeHeitiStd-Regular.otf")) { return(Convert.ToBase64String(outStream.ToArray())); } } } return(""); }
public static UserFileItem UpdateUserFile(this IFormFile uploadedFile, UserFileItem userFile, VehicleDbContext dbContext, VisibilityType visibility, string name = null, long?townId = null, long?groupId = null) { if (uploadedFile != null) { if (userFile != null) { if (userFile?.Status == StatusType.OK) { userFile.DeleteFromServer(); userFile.Status = StatusType.Deleted; dbContext.Entry(userFile).State = EntityState.Modified; } } userFile = uploadedFile.ToUserFile(name); userFile.GroupId = groupId; userFile.TownId = townId; userFile.Visibility = visibility; dbContext.Files.Add(userFile); } return(userFile); }
public static void DeleteFromServer(this UserFileItem userFile) { if (userFile?.Status != StatusType.OK) { throw new ArgumentException($"{nameof(userFile)} 是无效文件,已删除,或不存在"); } string spath = Path.Combine(HostingEnvironment.WebRootPath, userFile.ServerPath); string recycledPath = Path.Combine(HostingEnvironment.WebRootPath, "trashes", Path.GetFileName(userFile.ServerPath)); try { System.IO.File.Move(spath, recycledPath + ".deleted"); using (var writer = File.CreateText(recycledPath + ".info")) { var info = new { userFile.FileName, userFile.ClientPath, userFile.ServerPath, userFile.Size, userFile.Type, userFile.DownloadCount, userFile.Visibility, userFile.TownId, userFile.GroupId, userFile.Id, userFile.CreateBy, userFile.CreationDate, DeleteDate = DateTime.Now, }; writer.Write(JsonConvert.SerializeObject(info)); } } catch (IOException ex) { } }