コード例 #1
0
        public async Task <IActionResult> GetFile(Guid id, string filename)
        {
            var entity = await Database.FindAsync <TData>(id);

            if (entity == null)
            {
                return(NotFound(id));
            }

            if (!await Permissions.AllowRead(await CurrentUser, entity))
            {
                return(Forbid());
            }

            var container = BlobContainerProvider.GetContainerReference(GetContainerId(entity));

            if (!await container.ExistsAsync())
            {
                return(NotFound());
            }

            var dir     = container.GetDirectoryReference("files");
            var blobRef = dir.GetBlockBlobReference(filename);

            if (!await blobRef.ExistsAsync())
            {
                return(NotFound());
            }

            return(File(await blobRef.OpenReadAsync(), blobRef.Metadata["MIME"], Path.GetFileName(blobRef.Name.SafeFileName())));
        }
コード例 #2
0
        public async Task <ActionResult <List <FileEntry> > > GetFiles(Guid id)
        {
            var entity = await Database.FindAsync <TData>(id);

            if (entity == null)
            {
                return(NotFound(id));
            }

            if (!await Permissions.AllowRead(await CurrentUser, entity))
            {
                return(Forbid());
            }

            var files = new List <FileEntry>();

            var container = BlobContainerProvider.GetContainerReference(GetContainerId(entity));

            if (!await container.ExistsAsync())
            {
                return(files);
            }

            var dir           = container.GetDirectoryReference("files");
            var resultSegment = await dir.ListBlobsSegmentedAsync(null);

            foreach (var item in resultSegment.Results)
            {
                string name;
                switch (item)
                {
                case CloudBlockBlob blob:
                    name = blob.Name.SafeFileName();
                    files.Add(new FileEntry(name, Url.Action("GetFile", new { id, filename = name }), 42069));
                    break;

                case CloudPageBlob blob:
                    name = blob.Name.SafeFileName();
                    files.Add(new FileEntry(name, Url.Action("GetFile", new { id, filename = name }), 42069));
                    break;
                }
            }
            return(files);
        }