Xamarin 表单:Epubreader:System.AggregateException:'发生了一个或多个错误

Xamarin forms: Epubreader: System.AggregateException: 'One or more errors occurred

我正在使用 epubreader (vers-one) NuGet 包来解析 .epub 文件。

我的代码:

string fileName = "SampleEPUB.epub";
var assembly = typeof(MainPage).GetTypeInfo().Assembly;
Stream stream = assembly.GetManifestResourceStream($"{assembly.GetName().Name}.{fileName}");
EpubBook epubBook = EpubReader.ReadBook(stream);
foreach (EpubNavigationItem chapter in epubBook.Navigation)
{
    chapterDetails.Add(new ChapterDetails() { title = chapter.Title, htmlData = chapter.HtmlContentFile?.Content, subChapters = chapter.NestedItems });
}

出于测试目的,我在项目中添加了 epub 文件并像上面那样解析章节。我需要更改此实现。

我能够获取存储在我们数据库中的 epub 文件 link。现在我需要从 link 解析 epub 的章节。但是当我在上面的代码中使用 link 作为 fileName 时,我得到以下异常:

System.AggregateException: 'One or more errors occurred. (Value cannot be null.Parameter name: stream)'

我该如何解决这个问题?一个样本 link 是 here. I have added a sample project here 具有 .epub 文件 links 作为参考(epub 文件 links 在样本中被注释)。

System.AggregateException: 'One or more errors occurred. (Value cannot be null.Parameter name: stream)'

GetManifestResourceStream方法用于访问嵌入式文件,该文件应该放在Xamarin.Forms项目的共享项目中。该代码不适用于来自数据库的文件。您可以调试以获取该流为空,因为该文件名在项目中不存在。

Stream stream = assembly.GetManifestResourceStream($"{assembly.GetName().Name}.{fileName}");

在您的情况下,它只需要从 url 获取流。尝试使用以下代码获取流。

Stream stream;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)aRequest.GetResponse();

stream = response.GetResponseStream();