504 Ошибка тайм-аута шлюза при загрузке папки с несколькими файлами [закрыто]C#

Место общения программистов C#
Anonymous
504 Ошибка тайм-аута шлюза при загрузке папки с несколькими файлами [закрыто]

Сообщение Anonymous »

Я пытаюсь загрузить папку в виде ZIP-файла с помощью C# и SharpZipLib. Папка может содержать несколько файлов и подпапок.
Однако, когда количество файлов превышает около 40, запрос завершается с ошибкой 504 Gateway Timeout. Для меньшего количества файлов это работает нормально.
Я подозреваю, что это может быть связано с тайм-аутом запроса или проблемами с производительностью при создании ZIP-файла на лету.
Не могли бы вы помочь мне понять:
Почему происходит этот тайм-аут?
Как обрабатывать большие папки, не превышая тайм-аут?
Есть ли лучший подход для создания и загрузки ZIP-файлов в таких случаях?
Ниже представлена моя текущая реализация:

Код: Выделить всё

public string DownloadZip(string folderPath)
{
try
{
if (!Directory.Exists(folderPath))
return "ERROR: Folder not found";

string zipPath = Path.Combine(Path.GetTempPath(), "SPLDownload_" + Guid.NewGuid() + ".zip");

using (FileStream fsOut = System.IO.File.Create(zipPath))
using (ICSharpCode.SharpZipLib.Zip.ZipOutputStream zipStream =               new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(fsOut))
{
zipStream.SetLevel(3);
var files = Directory.GetFiles(folderPath, "*.*", SearchOption.AllDirectories);

foreach (string file in files)
{
string entryName = file.Substring(folderPath.Length).TrimStart('\\');
var entry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(entryName)
{
DateTime = DateTime.Now,
Size = new FileInfo(file).Length
};

zipStream.PutNextEntry(entry);

byte[] buffer = new byte[4096];

using (FileStream fs = System.IO.File.OpenRead(file))
{
int bytesRead;

while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
zipStream.Write(buffer, 0, bytesRead);
}
}

zipStream.CloseEntry();
}

zipStream.Finish();
}

return zipPath; // ✅ return zip file path
}
catch (Exception ex)
{
return "ERROR: " + ex.Message;
}
}
Ошибка:

504 Тайм-аут шлюза (происходит при обработке более ~40 файлов)

Вернуться в «C#»