public async Task <IActionResult> AddRelease(int?id, [Bind("Name", "Notes", "PreRelease")] DatapackVersionModel Release, IFormFile file) { if (id == null) { return(NotFound()); } var datapackModel = _context.Datapacks.Where(m => m.Id == id).Include(x => x.Author).Include(x => x.Versions).Single(); if (datapackModel == null) { return(NotFound()); } if (datapackModel.Author != await _userManager.GetUserAsync(User)) { return(Forbid()); } if (!Directory.Exists("./Zips/")) { Directory.CreateDirectory("./Zips"); } if (file != null) { string path = Path.GetFullPath($"./Zips/{datapackModel.Id}/{Release.Name}.zip"); var dir = Path.GetDirectoryName(path); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } using (var stream = new FileStream(path, FileMode.Create)) { await file.CopyToAsync(stream); } Release.Path = path; } else { return(RedirectToAction("AddRelease/" + id)); } Release.ReleaseDate = DateTime.UtcNow; Release.Datapack = datapackModel; _context.Add(Release); await _context.SaveChangesAsync(); return(RedirectToAction("Details", new { id = id })); }
public async Task <IActionResult> Download(int?id, string Version) { if (id == null) { return(NotFound()); } var datapackModel = await _context.Datapacks.Where(m => m.Id == id).Include(x => x.Versions).SingleAsync(); if (datapackModel == null) { return(NotFound()); } DatapackVersionModel version = null; if (!string.IsNullOrEmpty(Version)) { version = datapackModel.Versions.First(x => x.Name == Version); } if (version == null) { version = datapackModel.Versions.OrderBy(x => x.ReleaseDate).ToList()[0]; } var content = new FileStream(version.Path, FileMode.Open, FileAccess.Read, FileShare.Read); var response = File(content, "application/octet-stream", $"{datapackModel.Name}-{version.Name}.zip");//FileStreamResult datapackModel.Downloads++; _context.Update(datapackModel); await _context.SaveChangesAsync(); return(response); //return RedirectToAction("Details", new { id = id}); }