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()))); }
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); }