Как скачать PDF с AWS в MVC, который не поврежден - PullRequest
0 голосов
/ 14 января 2020

У меня есть страница MVC, где пользователь может загрузить файл, сохраненный в AWS S3. Я протестировал TXT, ODT и PDF-файл. PDF-файл является единственным, который приходит с повреждениями. Два других скачать и открыть просто отлично. Если я загружаю напрямую из S3 через браузер, файл в порядке.

Когда я сравниваю поврежденный файл в возвышенном тексте с другим, поврежденный файл начинает показывать '<0x00> <0x00> <0x00> <0x00> <0x00> ....' в строке 153. Открываемый файл продолжается с большим количеством другого содержимого по строке 13914. Я пробовал несколько файлов PDF, и все они делают одно и то же, поэтому я предполагаю, что это способ, которым я возвращаю файл из mvc ,

Я также сравнил размер файлов хороших и плохих файлов, и они сообщают о том же размере 1 497 347 байт. Но размер на диске отличается от хорошего в 1,503,232 и плохого в 1,499,136.

Вот метод контроллера.

public FileResult ViewTaxExemptDoc(string id)
{
    var file = _service.GetPdfFromDeal(id);
    return new FileContentResult(file.FileContents, contentType) { FileDownloadName = file.FileName };
}

_service возвращает следующий объект File, заполнив конструктор поток ответов s3.

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);
    }

    public void SaveAs(string fileLocation)
    {
        var s3 = new S3Service();
        s3.SaveToS3(this.UploadedFile, s3.GetS3Path(fileLocation));
    }
}

Получить поток файлов S3

public Stream GetFileStream(string path)
{
    IAmazonS3 client;
    using (client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1))
    {
        var file = client.GetObject(new GetObjectRequest()
        {
            BucketName = AwsConstants.TecBucket,
            Key = path
        });
        return file.ResponseStream;
    }
}

Итак, есть идеи, почему это происходит только с файлами PDF?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...