How to download a file to browser from Azure Blob Storage

后端 未结 4 678
没有蜡笔的小新
没有蜡笔的小新 2020-11-29 23:47

I\'m already successfully listing available files, but I needed to know how I could pass that file down to the browser for a user to download without necessarily saving it t

4条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-30 00:41

    I have done a sample where you can upload and download blob file.

    using System;
    using System.Threading.Tasks;
    using System.IO;
    using Microsoft.Azure.Storage;
    using Microsoft.Azure.Storage.Blob;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using System.Linq;
    using System.Collections.Generic;
    
    namespace GetBackup
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                string Config_string = "";
    
                using (StreamReader SourceReader = File.OpenText(@"appsettings.json"))
                {
                    Config_string = await SourceReader.ReadToEndAsync();
                }
    
                var config = (JObject)JsonConvert.DeserializeObject(Config_string);
    
                if(config["Application_type"].ToString()== "Backup")
                {
                    string Dir_path = config["Backup_Path"].ToString();
                    string[] allfiles = Directory.GetFiles(Dir_path, "*.*", SearchOption.AllDirectories);
    
    
                    string storageConnectionString = config["AZURE_STORAGE_CONNECTION_STRING"].ToString();
                    CloudStorageAccount storageAccount;
                    if (CloudStorageAccount.TryParse(storageConnectionString, out storageAccount))
                    {
                        CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
                        CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("rtddata");
                        //await cloudBlobContainer.CreateAsync();
    
                        string[] ExcludeFiles = config["Exception_File"].ToString().Split(',');
    
                        foreach (var file in allfiles)
                        {
                            FileInfo info = new FileInfo(file);
                            if (!ExcludeFiles.Contains(info.Name))
                            {
                                string folder = (Dir_path.Length < info.DirectoryName.Length) ? info.DirectoryName.Replace(Dir_path, "") : "";
                                folder = (folder.Length > 0) ? folder + "/" : "";
                                CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(folder + info.Name);
                                await cloudBlockBlob.UploadFromFileAsync(info.FullName);
                            }
    
                        }
    
                    }
                }
                
                else if (config["Application_type"].ToString() == "Restore")
                {
                    string storageConnectionString = config["AZURE_STORAGE_CONNECTION_STRING"].ToString();
                    CloudStorageAccount storageAccount;
                   
                    if (CloudStorageAccount.TryParse(storageConnectionString, out storageAccount))
                    {
                        CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
                        CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("rtddata");
                        string Dir_path = config["Restore_Path"].ToString();
    
                        IEnumerable results = cloudBlobContainer.ListBlobs(null,true);  
                        foreach (IListBlobItem item in results)
                        {
                            string name = ((CloudBlockBlob)item).Name;
                            if (name.Contains('/'))
                            {
                                string[] subfolder = name.Split('/');
                                if (!Directory.Exists(Dir_path + subfolder[0]))
                                {
                                    Directory.CreateDirectory(Dir_path + subfolder[0]);
                                }
                                
                            }  
                                CloudBlockBlob blockBlob = cloudBlobContainer.GetBlockBlobReference(name);
                                string path = (Dir_path + name);
                                blockBlob.DownloadToFile(path, FileMode.Create);
                        }
                        
    
                    }
                        
                }
    
                
                
            }
        }
    }
    

提交回复
热议问题