C # - сохранить поток в переменной класса и передать его функции - PullRequest
0 голосов
/ 22 октября 2018

У меня серьезные проблемы с этим.У меня есть функция, которая запрашивает поток, который читается и возвращается дополнительной функцией.Поток принадлежит PNG-изображению, которое изображается как фоновое изображение в графическом окне в форме.Это работает нормально, но я хочу сохранить данные потока в классе streamInfo в переменной streamData, чтобы потом я мог передать их другой функции, которая позволяет загружать поток или, скорее, изображение в другое местоFTP-сервер.Когда я передаю поток в качестве аргумента, я получаю сообщение об ошибке

Поток не читается

Если я пытаюсь вывести данные потока в консоль, он просто говорит System.Net.FtpdataStream.

Как я могу сохранить возвращенный поток (предпочтительно в классе и без его преобразования или кодирования) и затем передать его другой функции, чтобы он все еще читался и мог быть передан в качестве аргумента загрузки?

Это основная функция:

                if (content.Contains(box.SelectedItem.ToString()))
                {                      
                    stream = request_Preview_Image("somePath" + content);
                    this.imagePreview.BackgroundImage = Image.FromStream(stream);
                    blitzStream.streamData = stream;
                    blitzStream.streamName = content;
                }

Это вызываемая функция:

        Stream request_Preview_Image(string create)
        {
            FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create("ftp://someFTP" + create);
            ftp.Credentials = someCredentials;
            ftp.Method = WebRequestMethods.Ftp.DownloadFile;
            FtpWebResponse response = (FtpWebResponse)ftp.GetResponse();
            try
            {
                return (Stream)response.GetResponseStream();
            }
            catch
            {
                return (Stream)null;
            }
        }

Это класс:

    private class streamInfo
    {
        public string streamName { get; set; } = null;
        public Stream streamData { get; set; } 
    }

Большое спасибо!

1 Ответ

0 голосов
/ 22 октября 2018

Если вы пытаетесь сохранить содержимое потока для последующего извлечения в виде потока, вы можете использовать это: Как скопировать содержимое одного потока в другой? .Похоже, вы создаете ссылку на этот поток, но где-то между созданием ссылки и попыткой сохранить ее вы используете поток, например, для чтения содержимого и, возможно, закрытия его.Но использование потоков изображений в памяти для веб-сервера - это плохая практика.Ваш сайт не может масштабироваться с таким подходом.

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