public JsonResult Info(FileNode target) { if (!target.HasReadAuthority(User, Database)) { throw new AuthorizeException("無權限存取該目標"); } return new ApiResult() { Result = target }; }
public JsonResult Children( FileNode target, [FromQuery]int index = 0, [FromQuery]int length = 10, [FromQuery]OrderTypes order = OrderTypes.DirFirst) { if (!target.HasReadAuthority(User, Database)) { throw new AuthorizeException("無權限存取該目標"); } if (target.IsFile) throw new ApiInvalidOperationException("檔案無子系"); var data = target.GetChildren(Database); if (order == OrderTypes.DirFirst) { data = from t in data orderby t.IsFile, t.Ext, t.Name select t; } else if (order == OrderTypes.FileFirst) { data = from t in data orderby t.IsFile, t.Ext descending, t.Name select t; } var result = new ApiResult() { Result = data.Skip(index).Take(length) }; result.Type.Index = index; result.Type.Length = length; result.Type.Count = data.Count(); return result; }
public FileStreamResult Download(FileNode target) { if (!target.HasReadAuthority(User, Database)) { throw new AuthorizeException("無權限存取該目標"); } target.Download++; Database.SaveChanges(); if (target.IsFile) { return File(target.GetFileStream(), target.ContentType, target.FullName); } else { var FilePath = target.GetAndCreateDirZipFileRealPath(User, Database); Response.OnCompleted(async (filePath) => { System.IO.File.Delete((string)filePath); },FilePath); return File( new FileStream(FilePath, FileMode.Open), "application/zip", $"{target.Name}.zip"); } }
public JsonResult GeneratePreviewKey(FileNode target) { if (!target.HasReadAuthority(User, Database)) { throw new AuthorizeException("無權限存取該目標"); } if (!target.IsFile) throw new ApiInvalidOperationException($"目標節點不應該為目錄"); var ExpireTime = DateTime.Now.AddMinutes(10); Guid Key = PreviewKeyCheck.Create(target.Id, ExpireTime); var result = new ApiResult() { Result = new { TargetId = target.Id, Key = Key, ExpireTime = ExpireTime } }; result.Type.Name = "PreviewKey"; return result; }
public JsonResult Search( FileNode target = null, [FromQuery]string keyword = "", [FromQuery]int index = 0, [FromQuery]int length = 10, [FromQuery]OrderTypes order = OrderTypes.DirFirst) { if (target == null && !IsLogin) throw new AuthorizeException(); if (target == null) { target = User.GetRootFileNode(Database); } if (target.IsFile) throw new ApiInvalidOperationException("檔案無子系"); if (!target.HasReadAuthority(User, Database)) { throw new AuthorizeException("無權限存取該目標"); } IQueryable<FileNode> data = Database.FileNode.Where(x => x.OwnerId == User.Id).Where(x => x.Name.Contains(keyword)); if (target != null) { data = from t in Database.FileNode where t.ParentId == target.Id && t.Name.Contains(keyword) select t; } if (order == OrderTypes.DirFirst) { data = from t in data orderby t.IsFile, t.Ext, t.Name select t; } else if (order == OrderTypes.FileFirst) { data = from t in data orderby t.IsFile, t.Ext descending, t.Name select t; } var result = new ApiResult() { Result = data.Skip(index).Take(length) }; result.Type.Index = index; result.Type.Length = length; result.Type.Count = data.Count(); return result; }