Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions src/BootstrapBlazor.Server/Components/Samples/ZipArchives.razor
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@page "/zip-archive"
@page "/zip-archive"
@layout MainLayout
@inject IStringLocalizer<ZipArchives> Localizer

Expand All @@ -13,10 +13,14 @@ private IZipArchiveService? ZipArchiveService { get; set; }</Pre>
<p>@Localizer["ZipArchiveFileText"]</p>
<Pre class="mb-3">Task&lt;Stream&gt; ArchiveAsync(IEnumerable&lt;string&gt; files, ArchiveOptions? options = null);

Task ArchiveAsync(string archiveFileName, IEnumerable&lt;string&gt; files, ArchiveOptions? options = null);</Pre>
Task ArchiveAsync(string archiveFile, IEnumerable&lt;string&gt; files, ArchiveOptions? options = null);

Task&lt;Stream&gt; ArchiveAsync(IEnumerable&lt;ArchiveEntry&gt; entries, ArchiveOptions? options = null);

Task ArchiveAsync(string archiveFile, IEnumerable&lt;ArchiveEntry&gt; entries, ArchiveOptions? options = null);</Pre>

<p>@Localizer["ZipArchiveDirectoryText"]</p>
<Pre class="mb-3">Task ArchiveDirectory(string archiveFileName, string directoryName, CompressionLevel compressionLevel = CompressionLevel.Optimal, bool includeBaseDirectory = false, Encoding? encoding = null);</Pre>
<Pre class="mb-3">Task ArchiveDirectoryAsync(string archiveFile, string directoryName, CompressionLevel compressionLevel = CompressionLevel.Optimal, bool includeBaseDirectory = false, Encoding? encoding = null);</Pre>

<p>@Localizer["ZipArchiveExtractText"]</p>
<Pre class="mb-3">bool ExtractToDirectory(string archiveFile, string destinationDirectoryName, bool overwriteFiles = false, Encoding? encoding = null);</Pre>
<Pre class="mb-3">Task&lt;bool&gt; ExtractToDirectoryAsync(string archiveFile, string destinationDirectoryName, bool overwriteFiles = false, Encoding? encoding = null);</Pre>
Comment thread
ArgoZhang marked this conversation as resolved.
34 changes: 27 additions & 7 deletions src/BootstrapBlazor/Services/DefaultZipArchiveService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,24 @@ namespace BootstrapBlazor.Components;

class DefaultZipArchiveService : IZipArchiveService
{
/// <summary>
/// <inheritdoc/>
/// </summary>
Comment thread
ArgoZhang marked this conversation as resolved.
public Task<Stream> ArchiveAsync(IEnumerable<string> files, ArchiveOptions? options = null) => ArchiveAsync(files.Select(f => new ArchiveEntry()
{
SourceFileName = f,
EntryName = Path.GetFileName(f),
}), options);

/// <summary>
/// <inheritdoc/>
/// </summary>
Comment thread
ArgoZhang marked this conversation as resolved.
public Task ArchiveAsync(string archiveFile, IEnumerable<string> files, ArchiveOptions? options = null) => ArchiveAsync(archiveFile, files.Select(f => new ArchiveEntry()
{
SourceFileName = f,
EntryName = Path.GetFileName(f),
}), options);

/// <summary>
/// <inheritdoc/>
/// </summary>
Expand All @@ -28,7 +46,7 @@ public async Task<Stream> ArchiveAsync(IEnumerable<ArchiveEntry> entries, Archiv
/// </summary>
public async Task ArchiveAsync(string archiveFile, IEnumerable<ArchiveEntry> entries, ArchiveOptions? options = null)
{
using var stream = File.OpenWrite(archiveFile);
await using var stream = File.OpenWrite(archiveFile);
await ArchiveFilesAsync(stream, entries, options);
}

Expand All @@ -48,14 +66,16 @@ private static async Task ArchiveFilesAsync(Stream stream, IEnumerable<ArchiveEn
else if (Directory.Exists(f.SourceFileName))
{
var entryName = f.EntryName;
if (!string.IsNullOrEmpty(entryName))
if (string.IsNullOrEmpty(entryName))
{
continue;
}

Comment thread
ArgoZhang marked this conversation as resolved.
Outdated
if (!entryName.EndsWith('/'))
{
if (!entryName.EndsWith('/'))
{
entryName = $"{entryName}/";
}
archive.CreateEntry(entryName, f.CompressionLevel ?? options.CompressionLevel);
entryName = $"{entryName}/";
}
archive.CreateEntry(entryName, f.CompressionLevel ?? options.CompressionLevel);
}
else if (File.Exists(f.SourceFileName))
{
Expand Down
16 changes: 16 additions & 0 deletions src/BootstrapBlazor/Services/IZipArchiveService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,22 @@ namespace BootstrapBlazor.Components;
/// </summary>
public interface IZipArchiveService
{
/// <summary>
/// 将文件归档方法
/// </summary>
/// <param name="files">要归档的文件集合</param>
/// <param name="options">归档配置</param>
/// <returns>归档数据流</returns>
Task<Stream> ArchiveAsync(IEnumerable<string> files, ArchiveOptions? options = null);

/// <summary>
/// 将文件归档方法
/// </summary>
/// <param name="archiveFile">归档文件</param>
/// <param name="files">要归档的文件集合</param>
/// <param name="options">归档配置</param>
Task ArchiveAsync(string archiveFile, IEnumerable<string> files, ArchiveOptions? options = null);

/// <summary>
/// 将文件归档方法
/// </summary>
Expand Down