如何将 zip 压缩文件夹保存到磁盘 asp.net core 3.0
How to save zip compressed folder to disk asp.net core 3.0
我想使用 .net core 3.0 将压缩文件夹上传并保存到我的磁盘驱动器上的路径,但压缩文件夹保存为 0 字节
[HttpPost]
[ValidateAntiForgeryToken()]
[RequestFormLimits(MultipartBodyLengthLimit = 20971520)]//max size should be 20MB
public IActionResult AddFile(List<IFormFile> files)
{
IActionResult ar = null;
try
{
if (id != 0)
{
foreach(var singlefile in files)
{
var ext = Path.GetExtension(singlefile.FileName).ToLowerInvariant();
//begin saving procedure
if(singlefile.Length > 0 && singlefile.Length <= Convert.ToInt32(_config.Value.FileSizeLimit))
{
var filepath = Path.Combine(_config.Value.StoredFilesPath, Path.GetRandomFileName().Split('.')[0] + ext);
using(var stream = System.IO.File.Create(filepath))
{
singlefile.CopyToAsync(stream);
}
}
}
}
catch (Exception e)
{
_log.Error(e);
}
return ar;
}
请问我错过了什么?我可以使用同一段代码保存具有其他扩展名的文件,它保存并且我可以正确查看但只有 .zip 文件保存为 0bytes
您没有等待复制任务完成。尝试将方法更改为异步操作:
public async Task<IActionResult> AddFile(List<IFormFile> files)
{
...
using(var stream = System.IO.File.Create(filepath))
{
await singlefile.CopyToAsync(stream); // await here, otherwise the stream is disposed quickly
}
...
}
我想使用 .net core 3.0 将压缩文件夹上传并保存到我的磁盘驱动器上的路径,但压缩文件夹保存为 0 字节
[HttpPost]
[ValidateAntiForgeryToken()]
[RequestFormLimits(MultipartBodyLengthLimit = 20971520)]//max size should be 20MB
public IActionResult AddFile(List<IFormFile> files)
{
IActionResult ar = null;
try
{
if (id != 0)
{
foreach(var singlefile in files)
{
var ext = Path.GetExtension(singlefile.FileName).ToLowerInvariant();
//begin saving procedure
if(singlefile.Length > 0 && singlefile.Length <= Convert.ToInt32(_config.Value.FileSizeLimit))
{
var filepath = Path.Combine(_config.Value.StoredFilesPath, Path.GetRandomFileName().Split('.')[0] + ext);
using(var stream = System.IO.File.Create(filepath))
{
singlefile.CopyToAsync(stream);
}
}
}
}
catch (Exception e)
{
_log.Error(e);
}
return ar;
}
请问我错过了什么?我可以使用同一段代码保存具有其他扩展名的文件,它保存并且我可以正确查看但只有 .zip 文件保存为 0bytes
您没有等待复制任务完成。尝试将方法更改为异步操作:
public async Task<IActionResult> AddFile(List<IFormFile> files) { ... using(var stream = System.IO.File.Create(filepath)) { await singlefile.CopyToAsync(stream); // await here, otherwise the stream is disposed quickly } ... }