ASP.NET MVC Файловый метод - PullRequest
       1

ASP.NET MVC Файловый метод

0 голосов
/ 29 сентября 2011

Привет! Я хотел бы отправить пользователю файл, но без указания URL.

При использовании метода «Файл» проблема в том, что мой файл находится на другом сервере, поэтому у меня есть только URL, а не виртуальный путь.пытался использовать WebClient для получения файловых байтов для использования в методе File, но это довольно медленно, мои файлы превышают 20 Мб!

Любая идея о том, как я могу сделать это без получения всех файловых байтов перед отправкой их на мойuser?

Это мой код внутри моего контроллера:

            using (WebClient Client = new WebClient())
            {
                byte[] fileContent = Client.DownloadData(fileUrl);

                return File(fileContent, "application/octet-stream", fileName);
            }

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

Вы можете читать с вашего сервера в блоках и записывать их прямо в ваш выходной поток.Играйте с размером блока, чтобы настроить производительность.

using (var client = new WebClient()) {
    using (Stream data = client.OpenRead(fileUrl)) {
        using (var reader = new BinaryReader(data)) {
            var buffer = new byte[8192];
            int nread;
            while ((nread = reader.Read(buffer, 0, buffer.Length)) > 0)
                Response.OutputStream.Write(buffer, 0, nread);
        }
    }
}
return null;
0 голосов
/ 29 сентября 2011

Вы можете использовать Response.BinaryWrite для записи двоичных данных в выходной поток.

Вы можете сделать это несколькими порциями, если вам нужно, затем очистить и завершить ответ, когда онзавершено.

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