【发布时间】:2020-02-25 12:16:27
【问题描述】:
我们正在探索使用 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 并硬编码文件的路径,在浏览器中只是得到一个下载失败 - 网络错误。
【问题讨论】:
-
你为什么使用
Task.Factory.StartNew?在这里给你带来什么好处? -
在这种情况下...不是很多。最初我们打算收集 IFormFile 并处理它们。我不影响我的问题,我不相信(将仔细检查),因为 Excel 是相同的并且很好。
-
那么你应该放弃它。它使代码复杂化,并没有给您带来任何好处。
标签: asp.net aspose.words