feat: 数据库备份文件先生成到临时文件夹避免过早显示到列表中

This commit is contained in:
写意 2025-04-19 17:48:39 +08:00
parent 667417d789
commit cc6085f06d

View File

@ -115,22 +115,32 @@ public class SysDbBackupService : IDynamicApiController, ITransient
break;
}
var path = Path.Combine(_backupDir, $"{db.Ado.Connection.Database}_{DateTime.Now:yyyyMMddHHmmss}.{ext}");
// 生成临时文件路径
var tempPath = Path.Combine(Path.GetTempPath(), $"{db.Ado.Connection.Database}_{DateTime.Now:yyyyMMddHHmmss}.{ext}");
var finalPath = Path.Combine(_backupDir, $"{db.Ado.Connection.Database}_{DateTime.Now:yyyyMMddHHmmss}.{ext}");
// 备份数据库
switch (option.DbType)
{
case DbType.MySql or DbType.Sqlite or DbType.SqlServer:
await Task.Run(() => { db.DbMaintenance.BackupDataBase(db.Ado.Connection.Database, path); });
break;
{
// 使用临时路径进行备份
await Task.Run(() => { db.DbMaintenance.BackupDataBase(db.Ado.Connection.Database, tempPath); });
// 备份成功后,将临时文件移动到目标路径
File.Move(tempPath, finalPath);
break;
}
case DbType.PostgreSQL:
{
var fileStreamResult = (FileStreamResult)(await _databaseService.BackupDatabase());
// 将 fileStreamResult 保存为文件
await using var fileStream = new FileStream(path, FileMode.Create);
// 将 fileStreamResult 保存为临时文件
await using var fileStream = new FileStream(tempPath, FileMode.Create);
await fileStreamResult.FileStream.CopyToAsync(fileStream);
await fileStream.FlushAsync();
// 备份成功后,将临时文件移动到目标路径
File.Move(tempPath, finalPath);
break;
}
default: