Соскребание с IronPython, загрузка изображений в C # - PullRequest
0 голосов
/ 29 октября 2011

Итак, я написал свой скребок и передал класс 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? Мой бинарный отстой, я просто не совсем уверен, что с этим делать, в этом случае.

Ответы [ 2 ]

1 голос
/ 29 октября 2011

Похоже, 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 "";
    }

}
0 голосов
/ 31 октября 2011

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

...