fix: resolve InputFile destruction exception during stream read

This commit is contained in:
2026-05-10 20:06:15 +02:00
parent a6a5fc683c
commit ac5a50c014
3 changed files with 46 additions and 30 deletions
@@ -16,18 +16,16 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
@if (IsParsing) <div class="parsing-state shimmer" style="@(IsParsing ? "display:flex;" : "display:none;")">
{
<div class="parsing-state shimmer">
<div class="shimmer-content"> <div class="shimmer-content">
<div class="spinner"></div> <div class="spinner"></div>
<p>Scanning metadata...</p> <p>Scanning metadata...</p>
</div> </div>
</div> </div>
}
else if (Metadata != null) <div class="metadata-state" style="@(Metadata != null && !IsParsing ? "display:flex;" : "display:none;")">
@if (Metadata != null)
{ {
<div class="metadata-state">
<div class="metadata-info"> <div class="metadata-info">
<h3>@Metadata.Title</h3> <h3>@Metadata.Title</h3>
<p class="author">@Metadata.Author</p> <p class="author">@Metadata.Author</p>
@@ -36,23 +34,23 @@
<button class="btn btn-primary">Confirm & Upload</button> <button class="btn btn-primary">Confirm & Upload</button>
<button class="btn btn-secondary" @onclick="Reset">Cancel</button> <button class="btn btn-secondary" @onclick="Reset">Cancel</button>
</div> </div>
</div>
} }
else </div>
{
<div class="upload-state @(_isDragging ? "drag-over" : "")" <div class="upload-state @(_isDragging ? "drag-over" : "")"
style="@(!IsParsing && Metadata == null ? "display:flex;" : "display:none;")"
@ondragenter="OnDragEnter" @ondragenter="OnDragEnter"
@ondragleave="OnDragLeave"> @ondragleave="OnDragLeave">
<label for="epub-upload" class="drop-zone"> <div class="drop-zone">
<InputFile id="epub-upload" OnChange="HandleFileSelected" accept=".epub" class="file-input-cover" />
<div class="drop-zone-content"> <div class="drop-zone-content">
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg> <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg>
<p>Drag and drop your .epub file here</p> <p>Drag and drop your .epub file here</p>
<span>or click to browse</span> <span>or click to browse</span>
</div> </div>
<InputFile id="epub-upload" OnChange="HandleFileSelected" accept=".epub" class="file-input" />
</label>
</div> </div>
} </div>
@if (!string.IsNullOrEmpty(ErrorMessage)) @if (!string.IsNullOrEmpty(ErrorMessage))
{ {
@@ -138,7 +136,7 @@
catch (Exception ex) catch (Exception ex)
{ {
Logger.LogError(ex, "Error uploading EPUB"); Logger.LogError(ex, "Error uploading EPUB");
ErrorMessage = "An unexpected error occurred."; ErrorMessage = $"An unexpected error occurred: {ex.Message} \n {ex.StackTrace}";
} }
finally finally
{ {
@@ -77,6 +77,7 @@
cursor: pointer; cursor: pointer;
transition: all 0.3s ease; transition: all 0.3s ease;
background: rgba(255, 255, 255, 0.02); background: rgba(255, 255, 255, 0.02);
position: relative;
} }
.drop-zone:hover, .upload-state.drag-over .drop-zone { .drop-zone:hover, .upload-state.drag-over .drop-zone {
@@ -90,6 +91,7 @@
align-items: center; align-items: center;
gap: 1rem; gap: 1rem;
color: var(--nexus-text-muted, #888); color: var(--nexus-text-muted, #888);
pointer-events: none;
} }
.drop-zone-content svg { .drop-zone-content svg {
@@ -103,8 +105,15 @@
color: var(--nexus-text); color: var(--nexus-text);
} }
.file-input { .file-input-cover {
display: none; position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
cursor: pointer;
z-index: 10;
} }
/* Parsing State */ /* Parsing State */
+9
View File
@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="VersOne.Epub" Version="3.3.6" />
</ItemGroup>
</Project>