У меня есть страница 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?