Как мне вернуть большой текстовый файл с помощью ServiceStack?

1

У меня есть веб-служба, которая должна вернуть большой текстовый файл для вызова AJAX на клиенте. Для начала у меня есть допустимый путь к текстовому файлу:

var fileName = <file on server>

Я знаю, что имя файла действительно, потому что я могу открыть его на сервере как FileStream.

Я пробовал некоторые из разных подходов, рекомендованных в ServiceStack, и возвращал поток, но я не могу заставить его работать.

Что я должен вернуть? Мое лучшее предположение:

var stream = File.Open(fileName, ...);
return HttpResult(stream, "text/plain"){ AllowPartialResponse = false };

Но это не работает; ответ - это простой объект JSON. Использование FileInfo с параметром asAttachment тоже не работает; он просто вернул кучу информации о файлах.

Цель заключается в том, чтобы клиент JavaScript мог получать контент в виде строки:

api.getFile({...}).then( function (result) {
    // result has the file contents
}); 

Каков правильный способ сделать это?

Обновление:

В итоге я использовал этот поток, чтобы заставить его работать:

using( var fs = File.OpenRead( fileName ) )
{
    fs.CopyTo( Response.OutputStream );
}

Я не совсем понимаю, почему некоторые из других подходов не работают, но они, по-видимому, связаны с 1) FileInfo и тем, как он ведет себя на сервере, 2) разрешениями файлов в моей среде разработки и 3) "частичным контентом "проблемы и исключения. File.Exists() возвращает false, но не в debug обсуждает одну из проблем, которые меня отбрасывали.

Теги:
servicestack

1 ответ

4
Лучший ответ

Я только что передал Сервис, который возвращает текстовый файл, и API HttpResult работает как ожидалось:

[Route("/textfile-test")]
public class TextFileTest
{
    public bool AsAttachment { get; set; }
}

public class MyServices : Service
{
    public object Any(TextFileTest request)
    {
        return new HttpResult(new FileInfo("~/textfile.txt".MapHostAbsolutePath()), 
            asAttachment:request.AsAttachment);
    }
}

Что вы можете проверить с или без опции asAttachment:

Вы также можете получить доступ к текстовому файлу напрямую (т.е. без службы):

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

  • 0
    Спасибо за быстрый ответ. Вот ошибка, которую я получаю, независимо от размера файла: gist.github.com/sethlivingston/fc7236c59d4f11a4124e . Есть идеи?
  • 0
    @Seth Можете ли вы получить доступ к файлу напрямую через URL? Могу ли я попросить вас обновить ваш вопрос, чтобы включить необработанные заголовки HTTP-запросов и ответов, возвращающие эту ошибку? Вы можете получить это из WebInspector или Fiddler в Chrome.
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню