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);
我们正在探索使用 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);