public async Task <byte[]> GetAssetAsync(AssetDownloadRequest asset)
        {
            if (!File.Exists(asset.FilePath))
            {
                return(null);
            }

            using (var stream = new FileStream(asset.FilePath, FileMode.Open, FileAccess.Read))
            {
                stream.Seek(0, SeekOrigin.Begin);
                byte[] output = new byte[stream.Length];
                await stream.ReadAsync(output, 0, output.Length);

                return(output);
            }
        }
        public async Task <byte[]> GetAssetAsync(AssetDownloadRequest asset)
        {
            var container = await GetContainerAsync(asset.ContainerName);

            var blockBlob = container.GetBlockBlobReference(asset.FileName);

            if (!await blockBlob.ExistsAsync())
            {
                return(null);
            }

            using (var blobStream = blockBlob.OpenRead())
            {
                blobStream.Seek(0, SeekOrigin.Begin);
                byte[] output = new byte[blobStream.Length];
                await blobStream.ReadAsync(output, 0, output.Length);

                return(output);
            }
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> DownloadAsync(string fileName, string container = "", string attachment = "")
        {
            FilePath = Path.Combine(_settings.CurrentValue.AssetDirectory, fileName);

            if (container.HasValue())
            {
                CloudContainerName = container;
            }

            var provider = new FileExtensionContentTypeProvider();

            if (!provider.TryGetContentType(fileName, out string contentType))
            {
                contentType = "application/octet-stream";
            }

            var downloadRequest = new AssetDownloadRequest()
            {
                ContainerName = CloudContainerName,
                FileName      = fileName,
                FilePath      = this.FilePath,
            };

            var stream = await _assetStorageService.GetAssetAsync(downloadRequest);

            if (stream is null)
            {
                return(NotFound());
            }

            if (attachment.HasValue() && attachment == "true")
            {
                var fileNameEncoded = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);
                Response.Headers["Content-Disposition"] = "attachment; filename=\"" + fileNameEncoded + "\"";
            }

            return(File(stream, contentType));
        }