как определить, почему скачанный PDF поврежден - PullRequest
0 голосов
/ 28 сентября 2019

Мы используем Google Docs, чтобы взять шаблон документа, объединить значения в него с помощью заполнителей или путем создания таблиц, а затем загрузить его в формате PDF.У нас это работает во многих местах, где, когда загрузка завершена, она прикрепляется к электронной почте и отсылается.PDF-файлы всегда проходят нормально.

Теперь я делаю очень похожую вещь, но вместо того, чтобы отправлять по электронной почте PDF-файл, я возвращаю его в виде потока памяти в конечную точку mvc для прямой загрузки.Когда я делаю это, полученный PDF не может быть открыт.Если я открою его в возвышенном тексте вместе с другим PDF-файлом, который откроется, у хорошего будет PDF-заголовок и все содержимое PDF.Тот, который не открывается, имеет длинную строку двоичного содержимого - 0000 0000 0000 0000 0000 0000 0000 ...

Вот код, который я использую для создания PDF.Любая идея, почему он будет поврежден?

Конечная точка MVC

var file = await _googleDocService.GeneratePrelimAgreementFile(vm);

var contentType = "application/pdf";
var result = new FileContentResult(file.FileContents, contentType) { FileDownloadName = file.FileName };
return result;

Метод обслуживания Google Doc

public async Task<File> GeneratePrelimAgreementFile(PrelimCreateViewModel viewModel){
    //create the google doc here

    var contractPdf = driveService.Files.Export(docId, "application/pdf");

    var stream = new MemoryStream();
    var result = new File();

    contractPdf.MediaDownloader.ProgressChanged += progress =>
    {
        if (progress.Status != DownloadStatus.Completed) return;

        var filename = newTitle.Replace(" ","_") + ".pdf";

        result = new File(stream, filename);
    };

    await contractPdf.DownloadAsync(stream);

    return result;
}

Класс файла

public class File
{
    public byte[] FileContents { get; set; }

    public Stream UploadedFile { get; set; }
    public string FileName { get; set; }
    public File()
    {

    }
    public File(Stream file, string fileName)
    {
        this.UploadedFile = file;
        this.FileName = fileName;
        this.FileContents = new byte[file.Length];
        file.Read(this.FileContents, 0, (int)this.FileContents.Length);
    }
}
...