У меня очень странное поведение в устаревшем репозитории, который я клонировал и пытаюсь работать с ним.
Существует действие для загрузки файлов (файлы размещаются в AWS): (избыточный код для ясности опущен).
public virtual async Task<ActionResult> Entity(EntityModel entity)
{
using (Stream stream = downloadFileObject(model.Updates[GetUpdateNumberFromQueryString()].UpdateLink))
using (MemoryStream ms = new MemoryStream())
{
await stream.CopyToAsync(ms).ConfigureAwait(false);
return File(ms.ToArray(), "application/octet-stream", "The file.exe");
}
}
Метод DownloadFileObject
подключается к AWS, создает запрос и возвращает поток ответов:
public Stream GetS3FileObject(string objectKey, string fileName)
{
GetObjectRequest request = new GetObjectRequest
{
BucketName = bucketName,
Key = objectKey,
};
GetObjectResponse response = s3Client.GetObject(request);
return response.ResponseStream;
}
Это возвращает правильный поток без ошибок, я вижу, чтодлина указывает что-то около 35 мб, что является правильным размером файла, который я получаю.
Теперь я попробовал несколько подходов для возврата этого потока в виде загружаемого файла, и все они приводят к чему-то очень странному.
Вместо того, чтобы получить файл, браузер получает текстовый файл размером 110 КБ, который очень похож на мой текущий просмотр HTML ...
Возвращенный HTML-код содержит следующее сообщение об ошибке(кроме обычного контента сайта)
Ошибка выполнения дочернего запроса для обработчика System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper.OutputStream недоступен, когда используется пользовательский TextWriter.
Я попробовал несколько подходов, где первый и самый очевидный был просто:
var stream = DownloadFileObject(model.Updates[GetUpdateNumberFromQueryString()].UpdateLink);
return File(stream, "application/octet-stream", "The file.exe");
Затем я попытался скопировать этот потокв байтовый массив и вернуть его - однако, во всех случаях результат один и тот же.До последнего момента отладчик показывает, что мой поток / байтовый массив имеет размер 35 МБ.
Вот заголовки:
Кроме того, визуализированный HTML-код кнопки загрузки выглядит следующим образом:
<a href="/support/product-support/software/TheProductName" class="btn btn-default">Download update</a>
И кнопка создается впросмотр без каких-либо помощников HTML (Action.Link () и т. д.)
<a href="@updateVersions.Link" class="btn btn-default">@Model.SiteLabelDownloadUpdate</a>
Есть идеи, что может происходить?