Отправить бинарный файл в ответе мыла веб-сервиса

2

У меня есть поток ответов из веб-запроса ftp, который возвращает двоичный файл. Я хотел получить двоичные данные в байт [], а затем закодировать этот массив и отправить его как ответ веб-службы.

Stream responseStream = webResponse.GetResponseStream();
byte[] byteToEncode= ReadFully(responseStream,1024);
String str=Convert.ToBase64String(byteToEncode);

Я использовал эту функцию, которую я нашел онлайн, чтобы преобразовать поток в байт []

/// <summary>
/// Reads data from a stream until the end is reached. The
/// data is returned as a byte array. An IOException is
/// thrown if any of the underlying IO calls fail.
/// </summary>
/// <param name="stream">The stream to read data from</param>
/// <param name="initialLength">The initial buffer length</param>

public static byte[] ReadFully (Stream stream, int initialLength)
{
    // If we've been passed an unhelpful initial length, just  use 32K.
    if (initialLength < 1)
    {
        initialLength = 32768;
    }

    byte[] buffer = new byte[initialLength];
    int read=0;

  int chunk;
    while ( (chunk = stream.Read(buffer, read, buffer.Length-read)) > 0)
    {
        read += chunk;

        // If we've reached the end of our buffer, check to see if there's
        // any more information

        if (read == buffer.Length)
        {
            int nextByte = stream.ReadByte();

            // End of stream? If so, we're done

            if (nextByte==-1)
            {
                return buffer;
            }

            // Nope. Resize the buffer, put in the byte we've just
            // read, and continue
            byte[] newBuffer = new byte[buffer.Length*2];

            Array.Copy(buffer, newBuffer, buffer.Length);
            newBuffer[read]=(byte)nextByte;
            buffer = newBuffer;
            read++;
        }
    }
    // Buffer is now too big. Shrink it.

    byte[] ret = new byte[read];
    Array.Copy(buffer, ret, read);
    return ret;
} 

Но я получил исключение:

This stream does not support seek operations.

Буду признателен за любую помощь.

Спасибо, Сара

Теги:
web-services

1 ответ

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

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

Ещё вопросы

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