Aspose.Words Возврат PDF в виде потока ничего не делает (ASP. NET Web API) - PullRequest
1 голос
/ 25 февраля 2020

Мы изучаем использование Aspose.Words для некоторых преобразований в локальном API.

Это прекрасно работает для листов Excel с использованием Aspose.Cells.

[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 ничего не происходит, буквально ничего не продолжается в течение нескольких минут и затем время ожидания. Это не проблема тайм-аута с конвертацией, так как размер файла составляет 200 КБ.

[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 и жестко запрограммировал путь к файлу, а в браузере просто получил сбой загрузки - ошибка сети.

1 Ответ

1 голос
/ 25 февраля 2020

Возможно, что метод Save возвращает поток памяти в конце потока.

Вы должны попробовать следующее сразу после вызова doc.Save

outputFile.Seek(0, SeekOrigin.Begin);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...