Скрапинг с помощью IronPython, загрузка изображений в C#

Итак, я написал свой парсер и передал класс C# (карту) в IronPython, который затем с радостью загрузил то, что я считаю двоичными данными изображения, в byte[] вот так:

imageurl = "http://blabla.com/Image.ashx?id=" + card.Id + "&type=card"
imageresult = urllib2.urlopen(imageurl).read()
if imageresult == '':
    print 'Could not find image for ' + card.Title
card.AddImage(imageresult) # AddImage(byte[])

Затем я сохраняю это и извлекаю его из базы данных с помощью NHibernate и пытаюсь вернуть его с помощью этого на моем внешнем интерфейсе MVC:

var ms = new MemoryStream(card.Image);
var image = Image.FromStream(ms); // ***Parameter is not valid.***

Если бы я просто записал это в файл вместо объекта C # с Python, я почти уверен, что это сработает. Мой вопрос: есть ли хороший способ узнать, как будут выглядеть преобразования между типами данных IronPython и CLR? Мой бинарный файл отстой, я просто не знаю, что с этим делать в этом случае.


person Daniel Harvey    schedule 29.10.2011    source источник


Ответы (2)


Похоже, byte[] невозможно сохранить. Проверьте этот вопрос:

NHibernate MappingException: нет персистента для байта[]

возможно, вы не получаете одно и то же сообщение, потому что это происходит в IronPython, а не в C#, из-за проверки типов C#.

Вот еще одна ссылка на возможное решение путем сериализации byte[] как ASCII:

http://guildsocial.web703.discountasp.net/dasblogce/2009/04/03/NHibernateMappingToBinaryData.aspx

Вот фрагмент из этого поста:

return new ASCIIEncoding().GetString(bytes);

public static string ConvertByteArrayToString(byte[] bytes)
{
    try
    {
        return new ASCIIEncoding().GetString(bytes);
    }
    catch (Exception)
    {
        return "";
    }

}
person Community    schedule 29.10.2011

DrNewman попал прямо в точку. Проблема заключалась в том, что строковый формат вышел из железного питона. Вместо того, чтобы заниматься преобразованием его в правильный формат в python, а затем возвращать его обратно в C#, я просто решил передать эту часть C#. В итоге я вызвал AddImage из железного питона и просто передал URL-адрес. Затем выполните последний шаг очистки (изображение) с помощью С#.

person Daniel Harvey    schedule 30.10.2011