public async Task <Resp> GetLiseAsync(int index, int rows) { Paginator pager = new Paginator { Index = index, Rows = rows }; Comments.Hub commentHub = new Comments.Hub(); using var db = new DB.DarkContext(); pager.TotalRows = await db.Posts.CountAsync(); pager.List = await db.Posts.AsNoTracking() .OrderByDescending(p => p.CreateDate) .Skip(pager.GetSkip()) .Take(pager.Rows) .Include(p => p.Image) .Select(p => new Results.PostItem { Id = p.Id, NickName = p.Creator, Content = p.Content, Date = p.CreateDate.ToStandardTimeString(), Comments = commentHub.GetComments(p.Id, 1, 5), Img = new Share.Image { Thumbnail = p.Image.Thumbnail, Source = p.Image.Path } }) .ToListAsync(); return(Resp.Success(pager, "")); }
public async Task <Resp> NewPostsAsync(Models.NewPostInfo info) { (bool isValid, string msg) = info.IsValid(); if (!isValid) { return(Resp.Fault(Resp.NONE, msg)); } File files = await File.SaveImageAsync(info.Img); DB.Tables.Post newPost = new DB.Tables.Post { CreateDate = DateTimeOffset.Now, Creator = info.NickName, Content = info.Content, ImageId = files?.Id ?? File.DEFAULT_IMG_ID }; using var db = new DB.DarkContext(); db.Posts.Add(newPost); int suc = await db.SaveChangesAsync(); if (suc == 1) { return(Resp.Success(Resp.NONE, "成功")); } return(Resp.Fault(Resp.NONE, "提交失败")); }
private void ClearAllData() { using var db = new DB.DarkContext(); db.Database.ExecuteSqlRaw($"DELETE FROM {nameof(DB.DarkContext.Comments)}"); db.Database.ExecuteSqlRaw($"DELETE FROM {nameof(DB.DarkContext.Posts)}"); db.Database.ExecuteSqlRaw($"DELETE FROM {nameof(DB.DarkContext.Files)} where Id != 1"); }
public async Task <Resp> NewCommentsAsync(Models.NewCommentInfo info) { (bool isValid, string msg) = info.IsValid(); if (!isValid) { return(Resp.Fault(Resp.NONE, msg)); } List <File> files = await File.SaveImagesAsync(info.Images, 100, 100); DB.Tables.Comment newComment = new DB.Tables.Comment { PostId = info.PostId, CreateDate = DateTimeOffset.Now, Creator = info.NickName, Content = info.Content, Images = string.Join(", ", files.Select(f => f.Id)) }; using var db = new DB.DarkContext(); db.Comments.Add(newComment); int suc = await db.SaveChangesAsync(); if (suc == 1) { return(Resp.Fault(Resp.NONE, "成功")); } return(Resp.Fault(Resp.NONE, "提交失败")); }
internal List <Results.CommentItem> GetComments(int postId, int index, int rows) { using var db = new DB.DarkContext(); return(db.Comments.AsNoTracking() .Where(c => c.PostId == postId) .Skip(rows * (index - 1)) .Take(rows) .Select(c => new Results.CommentItem { NickName = c.Creator, Content = c.Content, Date = c.CreateDate.ToStandardTimeString(), Imgs = File.GetImagesPath(c.Images.SplitToInt(',')) }) .ToList()); }
/// <summary> /// 获取所有评论 /// </summary> public async Task <Resp> GetAllListAsync(int postId) { using var db = new DB.DarkContext(); List <Results.CommentItem> list = await db.Comments.AsNoTracking() .Where(c => c.PostId == postId) .Select(c => new Results.CommentItem { NickName = c.Creator, Content = c.Content, Date = c.CreateDate.ToStandardTimeString(), Imgs = File.GetImagesPath(c.Images.SplitToInt(',')) }) .ToListAsync(); return(Resp.Success(list)); }
public async Task <Resp> GetListAsync(int postId, int index, int rows) { Paginator pager = new Paginator { Index = index, Rows = rows }; using var db = new DB.DarkContext(); pager.TotalRows = await db.Comments.CountAsync(c => c.PostId == postId); pager.List = GetComments(postId, index, rows); return(Resp.Success(pager)); }
/// <summary> /// 获取一张图片的缩略图路径和原图路径 /// </summary> /// <param name="id"></param> /// <returns></returns> public static Share.Image GetImagePath(int id) { using var db = new DB.DarkContext(); DB.Tables.File file = db.Files.AsNoTracking() .FirstOrDefault(f => f.Id == id); Share.Image image = new Share.Image { Thumbnail = "", Source = "" }; if (file is null) { return(image); } image.Thumbnail = file.Thumbnail; image.Source = file.Path; return(image); }
/// <summary> /// 保存图片, 返回图片信息 /// </summary> /// <param name="file"></param> /// <returns></returns> public static async Task <File> SaveImageAsync(IFormFile file, double thumbnailWidth = THUMBNAIL_WIDTH, double thumbnailHeight = THUMBNAIL_HEIGHT) { /* * 保存图片到数据库, 同时保存图片的缩略图 */ if (file is null) { return(null); } // 源文件名 string fileName = file.FileName; // 扩展名 string ExtensionName = Path.GetExtension(fileName); // 保存名 string saveName = string.Concat(Guid.NewGuid().ToString(), ExtensionName); // 源文件大小 long size = file.Length; // 缩略图名字 // 原图保存名 + '-min' + 缩略图扩展名 string thumbnailName = saveName.Replace(ExtensionName, $"-min{DEFAULT_THUMBNAIL_EXTENSIONS}"); // 缩略图保存路径 string thumbnailPath = Path.Combine(SaveThumbnailPath, thumbnailName); // 原图的保存路径 string sourceSavePath = Path.Combine(SavePath, saveName); // 保存原图 using (Stream stream = System.IO.File.Create(sourceSavePath)) { await file.CopyToAsync(stream); } string coverTempName = saveName.Replace(ExtensionName, $"-cover{DEFAULT_THUMBNAIL_EXTENSIONS}"); string coverTempPath = null; // 制作缩略图的源文件 // 静态图是源文件 // GIF 图是截取的封面 string thumbnailSourcePath; // 是否 GIF // 是的话, 保存 GIF 的封面的缩略图 if (ExtensionName.ToUpper() == GIF) { /* * 先截取封面所临时缩略图 * 再使用里临时缩略图制作缩略图 */ coverTempPath = Path.Combine(SaveTempPath, coverTempName); GetGIFCover(sourceSavePath, coverTempPath); thumbnailSourcePath = coverTempPath; } else { thumbnailSourcePath = sourceSavePath; } // 保存缩略图 Task thumbnailT = MakeThumbnail(thumbnailSourcePath, thumbnailPath, thumbnailWidth, thumbnailHeight); DB.Tables.File fileModel = new DB.Tables.File { Name = fileName, ExtensionName = ExtensionName, Size = size, Path = Path.Combine(WebSaveDirectory, saveName), Thumbnail = Path.Combine(WebSaveThumbnailDirectory, thumbnailName) }; using DB.DarkContext db = new DB.DarkContext(); db.Files.Add(fileModel); int suc = await db.SaveChangesAsync(); // 等待缩略图保存完成 await thumbnailT; // 删除临时文件 if (!string.IsNullOrWhiteSpace(coverTempPath)) { System.IO.File.Delete(coverTempPath); } if (suc == 1) { return(new File(fileModel)); } return(null); }