Поток памяти, вставляющий изображение в БД

#c# #sql-server

#c# #sql-сервер

Вопрос:

Мне понадобится ваша помощь в решении этой части.

Я пытаюсь вставить это изображение alb.picture в базу данных. Для использования MemoryStream , я пропустил кое-что из прочитанного здесь.

Код не возвращает никаких ошибок, но он просто вставляет 0X00000 и извлекает (select * ....) , он показывает пробел в таблице.. Остальные поля, created_date и updated_date в порядке во время dipslay сетки.

 foreach (Album alb in albms.data)
{
    alb.picture = "https://graph.facebook.com/"   alb.id   
        "/picture/?access_token="   Token;

    MemoryStream ms = new MemoryStream(1000);
    string sfn = alb.picture;

    m_lImageFileLength = alb.picture.Length;
    m_barrImg = new Byte[Convert.ToInt32(m_lImageFileLength)];

    ms.Read(m_barrImg, 0, (int)m_lImageFileLength);
    objBLL.insert_FacebookPhotos(Convert.ToInt64(ui.id), m_barrImg, 
       alb.created_time.ToString(), alb.updated_time.ToString());


}
  

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

SC

Комментарии:

1. Вы читаете из (пустого) MemoryStream в (пустой) новый byte[] ). Где фактические данные?

2. Также; в первой строке вы присваиваете string значение alb.picture ; затем позже вы, похоже, передаете Length эту строку в качестве размера данных (см.: m_lImageFileLength = alb.picture.Length; ). Еще раз: где фактические данные?

3. На самом деле вы не считываете изображение с сервера. Прочитайте свой код и «запустите» на бумаге, напишите, что делает каждая строка, и вы увидите, где у вас сбой. Затем посмотрите на объекты HttpWebRequest и HttpWebResponse, чтобы устранить пробел.

Ответ №1:

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

 MemoryStream ms = new MemoryStream();
  

Похоже, что фактический поток находится в alb.picture . В зависимости от типа этого объекта, вы хотели бы сначала преобразовать его в byte[] . Затем запишите byte[] (вместо чтения) в MemoryStream ms:

 ms.Write(b, 0, b.Length); // where b is your byte[]
  

Существует много способов преобразования в byte[] в зависимости от типа объекта, над которым вы работаете.

В качестве альтернативы, если файл является HttpPostedFileBase, вы можете получить к нему доступ Stream напрямую через его свойство InputStream .