Aspose.Words 以 Stream 形式返回 PDF 不执行任何操作(ASP.NET Web API)

Aspose.Words Returning PDF as Stream does nothing (ASP.NET Web API)

我们正在探索使用 Aspose.Words 在本地 API 中进行一些转换。

这对使用 Aspose.Cells 的 Excel 工作表非常有效。

[HttpPost]
[Route("convert/excel")]
public async Task<IActionResult> ConvertExcel(IFormFile fileToConvert)
{
    var fileStream = new MemoryStream();
    fileToConvert.CopyTo(fileStream);
    var convertedFile = await pdfConverter.ConvertExcelAsync(fileStream);
    return File(convertedFile, "application/octet-stream");
}

然而,当对 Aspose.Words 使用完全相同的方法时,它什么也不做,实际上什么都不做,只会持续几分钟,然后超时。这不是转换超时问题,因为文件为 200KB。

[HttpPost]
[Route("convert/word")]
public async Task<IActionResult> ConvertWord(IFormFile fileToConvert)
{
    var fileStream = new MemoryStream();
    fileToConvert.CopyTo(fileStream);
    var convertedFile = await pdfConverter.ConvertWordAsync(fileStream);
    return File(convertedFile, "application/octet-stream");
}

我试过各种形式的返回文件,但没有成功。

return new FileStreamResult(convertedFile, "application/pdf");

实际的转换方法是这样的。

public Task<Stream> ConvertWordAsync(Stream fileStream)
{
    return Task.Factory.StartNew(() => ConvertWord(fileStream));
}

private Stream ConvertWord(Stream inputFile)
{
    var doc = new Document(inputFile);

    var outputFile = new MemoryStream();
    doc.Save(outputFile, Aspose.Words.SaveFormat.Pdf);
    //doc.Save(@"C:\ProgramData\foo.pdf", Aspose.Words.SaveFormat.Pdf); //THIS WORKS BUT NOT APPOPRIATE

    return outputFile;
}

我还对其进行了更新以支持 HttpGet 并对文件路径进行硬编码,然后在浏览器中出现下载失败 - 网络错误。

有没有可能是Save方法returns内存流在流的末尾。

您应该在调用 doc.Save

后立即尝试以下操作
outputFile.Seek(0, SeekOrigin.Begin);