Ответ .NET Nancy с видеофайлом (сам хостинг) - PullRequest
0 голосов
/ 26 апреля 2018

Я пишу собственный сервер на .NET на основе архитектуры REST с Nancy (версия 1.4.4).Я предпочел делать хостинг самостоятельно (Nancy.Hosting.Self - версия 1.4.1), и одна из необходимых функций - отвечать на запрос видеофайлом.Чтобы сделать изображение ясным, мой партнер пишет приложение React, и ему нужно это видео.

Я пробовал разные варианты:

Сначала я попробовал Response.AsFile(), но когда я пытаюсь получить к нему доступ черезпо ссылке получаю 404 с ярлыком "Запрошенный вами ресурс не найден".и я понятия не имею, почему ...

public class HelloModule : NancyModule
{
    public HelloModule()
    {
        Get["/"] = parameters =>
        {
            return Response.AsFile(@"C:\7\video112018.mp4","video/mp4");
        };
    }
}

Второй вариант должен был использовать GenericFileResponce, как в коде ниже, но это приводит к той же проблеме:

public class HelloModule : NancyModule
{
    public HelloModule()
    {
        Get["/"] = parameters =>
        {
            GenericFileResponse fileResponse = new GenericFileResponse(@"C:\7\video112018.mp4");
            return fileResponse;
        };
    }
}

Последнийя попытался записать напрямую в поток ответов, как показано в приведенном ниже коде, но в этом случае возникает ошибка «Указанное имя сети больше не доступно».Хитрость заключается в том, что эта ошибка иногда возникает, но я не нашел никакой зависимости, откуда она берется ...

public class HelloModule : NancyModule
{
    public HelloModule()
    {
        Get["/"] = parameters =>
        {
            return new Response
            {
                ContentType = "video/mp4",

                Contents = s =>
                {
                    String fileName = @"C:\7\video112018.mp4";
                    using (var stream = new FileStream(fileName, FileMode.Open))
                        stream.CopyTo(s);
                    s.Flush();
                    s.Close();
                }
            };
        };
    }
}

Буду очень признателен, если у вас есть какие-либо предложения по поводу этих решений или вы дадите другоеодин.

PS Я также пытался отправить изображение, оно работает с третьим подходом, но не с первым или вторым

PPS не судите код строго, потому что это только пример)

1 Ответ

0 голосов
/ 22 января 2019

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

Get["/"] = p =>
{
    var file = new FileStream(@"PATH_TO_FILE", FileMode.Open);
    return new StreamResponse(() => file, "video/mp4");
}

Это позволило воспроизводить видеофайлы, но не было никакого поиска.

В конце концов янайдено это сообщение.Добавление этих расширений позволяет искать видео.

...