コード例 #1
0
ファイル: FileController.cs プロジェクト: XuPeiYao/SharpDisk
 public JsonResult Info(FileNode target) {
     if (!target.HasReadAuthority(User, Database)) {
         throw new AuthorizeException("無權限存取該目標");
     }
     return new ApiResult() {
         Result = target
     };
 }
コード例 #2
0
ファイル: FileController.cs プロジェクト: XuPeiYao/SharpDisk
        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;
        }
コード例 #3
0
ファイル: FileController.cs プロジェクト: XuPeiYao/SharpDisk
        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");
            }
        }
コード例 #4
0
ファイル: FileController.cs プロジェクト: XuPeiYao/SharpDisk
        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;
        }
コード例 #5
0
ファイル: FileController.cs プロジェクト: XuPeiYao/SharpDisk
        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;
        }