【发布时间】:2017-08-26 23:31:19
【问题描述】:
我想将 azure 上容器中的所有文件下载为 zip 文件,并使下载路径为动态 这是现在的代码
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
string[] arr = userName.Split('\\');
string path = $@"C:\Users\{arr[1]}\Downloads\";
CloudBlobContainer contianner = BlobClient.GetContainerReference(contianerName);
var list = contianner.ListBlobs();
/// Console.WriteLine(list.Count());
string[] FilesName = new string[list.Count()];
int i = 0;
foreach (var blob in list)
{
string[] Name = blob.Uri.AbsolutePath.Split('/');
FilesName[i++] = Name[2];
// Console.WriteLine(Name[2]);
CloudBlockBlob blockBlob = contianner.GetBlockBlobReference(Name[2]);
System.IO.Directory.CreateDirectory($@"{path}ImagesPath");
using (var fileStream = System.IO.File.OpenWrite($@"{path}\ImagesPath\{Name[2]}"))
{
blockBlob.DownloadToStream(fileStream);
}
}
【问题讨论】:
-
动态是什么意思?基于日期?基于用户输入?照原样,当您下载时,用户仍然可以更改目标文件夹
-
不要硬编码选择下载路径
-
那么你想在里面放什么?你想从配置加载吗?你只告诉了你不想想做的事。
-
需要用户选择下载路径或者强制浏览器下载不想在代码中写路径
-
现在您终于解释了您的要求:这是一个基于浏览器的功能,您无法覆盖(您是否曾经在浏览器中下载过某些内容,并且显示了一个要求路径的弹出窗口?)您可以使用客户端提示预先接受路径,然后将其作为参数发送到此方法。但是您发布的方法缺少所有允许我们对此发表评论的网络特定代码。这是无法从浏览器提示用户的服务器端代码。您需要使用客户端代码 (javascript) 执行此操作,然后将结果传递给此方法。
标签: c# asp.net-mvc azure