2014-12-04 7 views
0

Я немного новичок в веб-разработке, и я не могу достичь того, что я пытаюсь сделать.Получить двоичные данные из C# с Ajax

У меня есть база данных со столом под названием «PI_Banners», где хранятся некоторые изображения. В этой таблице хранится идентификатор и столбец VARBINARY, который содержит двоичные данные изображения.

Что я пытаюсь сделать, это получить эти данные с помощью запроса Ajax функции C# и создать тег «img», используя схему URI данных. Затем добавить, что новое изображение в DIV

Это то, что я получил:

Ajax вызов:

$(document).ready(function() { 

    var dto = {}; 
    var dtoJSON = JSON.stringify(dto); 

    $.ajax({ 
     async: false, 
     url: 'BannerRotativo.aspx/devuelveBanners', 
     cache: false, 
     dataType: 'json', 
     type: "POST", 
     data: dtoJSON, 
     contentType: "application/json; charset=utf-8", 
     success: function(data, textStatus, jqXHR) { 
      responsedevuelveBanners(data); 
     }, 
     error: errorResponse 
     }); 
}); 

существуем "devuelveBanners" функцию C#.

C# код:

public static string devuelveBanners() 
{ 
    DataReader DR; 
    DR = listaBanners(); 
    //armaJson creates the Json string from the DataReader. 
    string strJson = GENERAL.armaJson(DR); 
    return strJson; 
} 


public DataReader listaBanners() 
    { 
     try 
     { 
      string strComando; 
      sqlCommand SQLC; 
      DataReader DR; 

      strComando = "SELECT banner_img FROM PI_Banners"; 
      //sqlCon is the connection, and is open already. 
      SQLC = new System.Data.SqlClient.SqlCommand(strComando, sqlCon); 
      SQLC.CommandType = CommandType.Text; 
      DR = SQLC.ExecuteReader(); 

      return DR; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

Когда я разобрать строку JSON назад, и создать изображение:

function responsedevuelveBanners(data) 
    { 
     var datos = JSON.parse(data.d); 
     $("#imgContainer").append("<img src='data:image/jpg;base64," + datos.Rows[0].Row[0].banner_img + "' />"); 
    } 

создается образ, но не показывает, потому что он имеет этот адрес:

data:image/jpg;base64,System.Byte[] 

Я знаю, что я делаю что-то ужасно неправильно чтобы получить данные json таким образом, но я не знаю, как этого добиться!

Заранее благодарен!

+0

Вам нужно т o вернуть данные изображения как 'Convert.ToBase64String (image_bytes)' (т. строка) –

ответ

2

Для того, чтобы использовать <img src="data:image/PNG;base64' в base64 часть, потому что вы должны вернуть Base64 строку вместо массива байтов поэтому вам необходимо преобразовать byte[] в 64Base с помощью: Convert.ToBase64String(buffer)

Таким образом, используя свой код, например:

ImageConverter imageConverter = new ImageConverter(); 
byte[] resourceByteArray = (byte[])imageConverter.ConvertTo(_YourObj.GetImage(), typeof(byte[])); 

Ваш метод WebAPI должен возвращаться:

return Convert.ToBase64String(resourceByteArray); 
+0

Что делать, если у меня уже есть массив байтов? Я просто пропустил шаг imageConverter и просто конвертировал его в Base64? Благодаря!!! –

+0

Ну, да, вы просто переходите к 'Convert.ToBase64String (resourceByteArray);' часть ответа. – Dalorzo

Смежные вопросы