如何将 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
    }
    ...
}