Мы используем 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);
}
}