我必须从一组URL创建一个zip文件。并且应该具有适当的文件夹结构。
所以我尝试像
public async Task<byte[]> CreateZip(Guid ownerId)
{
try
{
string startPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "zipFolder");//base folder
if (Directory.Exists(startPath))
{
DeleteAllFiles(startPath);
Directory.Delete(startPath);
}
Directory.CreateDirectory(startPath);
string zipPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{ownerId.ToString()}"); //folder based on ownerid
if (Directory.Exists(zipPath))
{
DeleteAllFiles(zipPath);
Directory.Delete(zipPath);
}
Directory.CreateDirectory(zipPath);
var attachemnts = await ReadByOwnerId(ownerId);
attachemnts.Data.ForEach(i =>
{
var fileLocalPath = $"{startPath}\\{i.Category}";
if (!Directory.Exists(fileLocalPath))
{
Directory.CreateDirectory(fileLocalPath);
}
using (var client = new WebClient())
{
client.DownloadFile(i.Url, $"{fileLocalPath}//{i.Flags ?? ""}_{i.FileName}");
}
});
var zipFilename = $"{zipPath}//result.zip";
if (File.Exists(zipFilename))
{
File.Delete(zipFilename);
}
ZipFile.CreateFromDirectory(startPath, zipFilename, CompressionLevel.Fastest, true);
var result = System.IO.File.ReadAllBytes(zipFilename);
return result;
}
catch (Exception ex)
{
var a = ex;
return null;
}
}
目前我正在将所有文件写入我的基本目录中(可能不是一个好主意)。目前,我必须手动删除所有文件夹和文件,以避免出现异常/不需要的文件。一切都可以写在内存中吗?
将所有文件和文件夹结构写入内存需要进行哪些更改?
参考方案
不,你不能。不能与内置的Dotnet一起使用。
根据我的评论,我建议根据Guid或类似文件将文件存储在自定义位置。例如:
“ / xxxx-xxxx-xxxx-xxxx /文件夹到压缩包/ ....”。
这将确保您可以使用相同的文件或相似的文件/文件夹名称来处理多个请求。
然后,您只需要清理并随后再次删除该文件夹,这样就不会用完空间。
ASP.NET Core Singleton实例与瞬态实例的性能 - c#在ASP.NET Core依赖注入中,我只是想知道注册Singleton实例是否会比注册Transient实例更好地提高性能?在我看来,对于Singleton实例,创建新对象和相关对象只需花费一次时间。对于Transient实例,此成本将针对每个服务请求重复。因此Singleton似乎更好。但是,在Singleton上使用Transient时,我们可以获得多…
ASP.NET Core-在Singleton注入上存储库依赖项注入失败 - c#我正在使用SoapCore为我的ASP.NET Core MVC应用程序创建Web服务。我正在使用Entity Framework Core和简单的存储库模式来获取我的数据库数据。我通过Startup.cs中的.AddSingleton()注入存储库类:services.AddSingleton<IImportRepository, ImportRep…
ddl在服务器中未更新-asp.net - javascript我在ASP.NET c#上工作。我有一个DropDownList。 (runat =“ server”)在$ {document).ready上,我更新了它的值:$(document).ready(function () { document.getElementById("ddl").value = "abc"; ……
ASP.NET Core-使用Windows身份验证进行授权 - c#我已将我的Web API配置为与Windows身份验证一起使用。我的目标实质上是根据用户的Windows帐户来限制控制器中的某些操作。一些将能够执行读取操作,而其他一些将能够执行将写入基础数据库的操作。我找到了大量有关如何设置基于声明的授权的文档,这是我认为我需要走的路。我还没有找到如何使用Windows身份验证进行设置。我想我缺少中间步骤,例如将Windo…
ASP.NET Core 3.0 Razor页面中的路由本地化 - c#我想在我的ASP.NET Core 3.0 Razor Pages应用程序中使用路由本地化。https://stackoverflow.com/a/52976625/107718似乎有一个针对2.2的解决方案,但是既然3.0中有重新设计的路由/端点,那么在3.0中还有更好的方法吗? 参考方案 ASP.NET Core 3.0引入了端点路由的新功能,通过该功能…