Передача фотографий в XML или ему подобном

Если название форума вам о чём-то говорит, то значит, внутри вы найдете что-то для себя полезное.
Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Передача фотографий в XML или ему подобном

Сообщение Rojohn » 13.01.2010 (Ср) 18:44

Добрый день!
Необходима консультация: возможно ли передавать фотографии (.jpg, .bmp) в файле XML или каким-нибудь похожим способом (как внедрённый объект) :?: Передача осуществляется в базу Oracle. Фотографии надо "запихнуть" в файл XML вручную из папки. Или только можно передавать ссылку на файл :?:
Спасибо!
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Re: Передача фотографий в XML или ему подобном

Сообщение Roman Koff » 13.01.2010 (Ср) 18:58

А экран <![CDATA[]]> не прокатит?
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Передача фотографий в XML или ему подобном

Сообщение MIT » 13.01.2010 (Ср) 19:03

Base64?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 13.01.2010 (Ср) 19:05

А в каком виде размещать в него фотографию :?: Наверное что-то типо Base64 :?:
Как это делается?
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Передача фотографий в XML или ему подобном

Сообщение FireFenix » 13.01.2010 (Ср) 19:09

Почему бы сразу не хранить в базе картинку без XML?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 13.01.2010 (Ср) 19:13

Всё не так: есть клиент на Access и VB, который хранит фото не в базе, а в папке. Из него делается выгрузка в Oracle и надо передать картинки, чтобы они попали в базу Oracle.
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Передача фотографий в XML или ему подобном

Сообщение FireFenix » 13.01.2010 (Ср) 19:15

Rojohn писал(а):Всё не так: есть клиент на Access и VD, который хранит фото не в базе, а в папке. Из него делается выгрузка в Oracle и надо передать картинки, чтобы они попали в базу Oracle.

Ну переносим данные с аксеса в оракл и картинку храним в оракле в поле с типом blob...
http://www.oracle-base.com/articles/9i/ ... HTTP9i.php
http://www.orafusion.com/oracf_image.htm
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 13.01.2010 (Ср) 19:18

Не... надо выгружать периодически из разных мест в России. Сейчас выгружается файлом XML без фото.
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 14.01.2010 (Чт) 11:03

По сути мне бы хотелось понять, как реализовать механизмы шифрования/дешифрования Base64. Кто знает или у кого есть примеры - просьба поделиться... :?:
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Передача фотографий в XML или ему подобном

Сообщение Antonariy » 14.01.2010 (Чт) 11:40

Файл XML определенный или любой? Если любой, то можно фотку передать в рекордсете, сохраненном в xml. Делается пятью строчками. Если определенный, то из xml рекордсета вырезается узел с картинкой и вставляется в xml, который передается, на сервере обратная операция. 10-15 строчек.

Base64 можно найти здесь, если вспомнить о поиске.
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 14.01.2010 (Чт) 12:29

Интересно! А как в XML передавать рекордсет? Примерчик можно глянуть?
Нашёл такие штучки по Base64 - делюсь:

В модуль:
Код: Выделить всё
Option Explicit
'Base64:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Public Function Encode(ByVal iStr As String) As String
  Dim iXml As New MSXML2.DOMDocument30
  Dim iArray() As Byte

   With iXml.createElement("Encoder")
      .dataType = "bin.base64"
      ReDim iArray(LenB(iStr))
      CopyMemory iArray(0), ByVal StrPtr(iStr), LenB(iStr)

      .nodeTypedValue = iArray()
      Encode = .Text
  End With
End Function

Public Function Decode(ByVal iStrbase64 As String) As Byte()
  Dim strXML As String

  strXML = "<DECODER xmlns:dt=" & Chr(34) & "urn:schemas-microsoft-com:datatypes" & Chr(34) & " dt:dt=" & Chr(34) & "bin.base64" & Chr(34) & ">" & iStrbase64 & "</DECODER>"
  With New MSXML2.DOMDocument30
    .loadXML strXML
    Decode = .selectSingleNode("DECODER").nodeTypedValue
  End With   
End Function


в поиске здесь нашёл лишь похожие случаи с HTML, но без примеров...
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 14.01.2010 (Чт) 14:09

Но теперь возник вопрос, а как представить картинку в виде текста :?: В каком формате они записаны (Юникоде?) :?:
Наверное надо различать что читаешь, .jpg или .bmp, но подозреваю, что формат картинки надо учитывать только при сохранении (декодировании)... И вообще, есть разница в моём случае, в каком формате кодировать? Неужели Base64 намного сожмёт формат JPG??? Я склонен вообще отказаться от всего этого и передавать ссылку и картинку как есть...
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 14.01.2010 (Чт) 14:12

FireFenix писал(а):Ну переносим данные с аксеса в оракл и картинку храним в оракле в поле с типом blob...


Кстати, а в каком формате хранится картинка в поле blob :?: Наверное в виде массива двоичных данных :?: Тогда к предыдущим вопросам уточнение: как представить картинку (bmp, jpg) в виде строки двоичных данных :?:
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Передача фотографий в XML или ему подобном

Сообщение FireFenix » 14.01.2010 (Чт) 15:02

Rojohn писал(а):
FireFenix писал(а):Ну переносим данные с аксеса в оракл и картинку храним в оракле в поле с типом blob...


Кстати, а в каком формате хранится картинка в поле blob :?: Наверное в виде массива двоичных данных :?: Тогда к предыдущим вопросам уточнение: как представить картинку (bmp, jpg) в виде строки двоичных данных :?:

какая платформа?

.net - http://www.codeproject.com/KB/recipes/I ... erter.aspx
vb6 - http://stackoverflow.com/questions/2792 ... ray-in-vb6
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 14.01.2010 (Чт) 15:34

А без контейнера для картинок никак нельзя? И это ведь только для BMP, а другие форматы (jpg нужен обязательно)?
Вообще я не совсем корректно задал вопрос перед этим: байтовый массив мне не подойдёт - его не передашь в файле XML. Нужно представить картинку в таком виде, чтобы она могла быть размещена в инструкции <![CDATA[]]>.
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Передача фотографий в XML или ему подобном

Сообщение Antonariy » 14.01.2010 (Чт) 15:50

Это вы не в ту степь свернули.
Код: Выделить всё
Set rs = New ADODB.Recordset
rs.Fields.Append "Photo", adVarBinary
rs.Open
rs.AddNew
rs(0).Value = ReadFileBinary("c:\photo.jpg") 'читаем как байтовый массив
set doc = New DomDocoment
rs.Save doc, adPersistXML
debug.print doc.xml
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Передача фотографий в XML или ему подобном

Сообщение Antonariy » 14.01.2010 (Чт) 15:55

Неужели Base64 намного сожмёт формат JPG???
Base64 ничего сжать не может, только увеличить. Грубо — один нечитаемый символ заменяется двумя читаемыми.
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 14.01.2010 (Чт) 16:11

Не могу проверить, пока не пойму, как грамотно реализовать ReadFileBinary!
В представленном выше примере читается только .bmp в битовый массив, да и то только из контейнера на форме. А нужно .jpg и .bmp из файла.
Попробую "поколдовать" с .bmp пока что...
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Передача фотографий в XML или ему подобном

Сообщение Antonariy » 14.01.2010 (Чт) 16:34

Не могу проверить, пока не пойму, как грамотно реализовать ReadFileBinary!
Жесть.

Код: Выделить всё
Public Function ReadFile(path As String) As Byte()
Dim r() As Byte
    Open path For Binary As #1
    ReDim r(LOF(1) - 1)
    Get #1, , r
    Close #1
    ReadFile = r
End Function
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 14.01.2010 (Чт) 17:19

А я думал там как-то по-другому, эксклюзивно для картинок:)
Вот сделал - ругается на строчку
rs.Fields.Append "Photo", adVarBinary
скорее всего такой тип не работает для рекордсета почему-то... :?

Код: Выделить всё
Private Sub Command1_Click()
  Dim rs As ADODB.Recordset, doc As XMLDocument

  Set rs = New ADODB.Recordset
  rs.Fields.Append "Photo", adVarBinary
  rs.Open
  rs.AddNew
  rs(0).Value = ReadFileBinary("c:\5.bmp") 'читаем как байтовый массив
  Set doc = New DOMDocument
  rs.Save doc, adPersistXML
  MsgBox doc.xml
End Sub


Ошибка на строке rs.Fields.Append "Photo", adVarBinary:
"Run-time error '3001' Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом."
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Передача фотографий в XML или ему подобном

Сообщение Хакер » 15.01.2010 (Пт) 10:28

[offtopic]Интересно, а что будут через 10 лет впихивать в XML? Наверное HD-фильмы...[/offtopic]
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Передача фотографий в XML или ему подобном

Сообщение Antonariy » 15.01.2010 (Пт) 10:41

Нужно размер поля указать. Можно указать с запасом, а можно сделать так:
Код: Выделить всё
Dim r() as Byte
r = ReadFileBinary("c:\5.bmp")
rs.Fields.Append "Photo", adVarBinary, UBound(r)+1
Интересно, а что будут через 10 лет впихивать в XML? Наверное HD-фильмы...
Кстати о птичках. Автор, имей ввиду, что при сохранении файла в xml этим способом его размер увеличится ровно в два раза. При использовании Base64 — раза в полтора, но заметно увеличится время конвертации. Решай, что тебе важнее.
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 15.01.2010 (Пт) 11:16

Эта ошибка исчезла, но теперь картинка не помещается в байтовый массив:
Код: Выделить всё
Dim r1() As Byte
 
  Open path For Binary As #1
  ReDim r1(LOF(1) - 1) 'Здесь размерность массива выходит за рамки


По поводу решения: решать будет архитектор проекта, моя задача предъявить варианты...
Кстати, надо ещё посмотреть, как оно будет выглядеть в теле XML!
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Передача фотографий в XML или ему подобном

Сообщение Antonariy » 15.01.2010 (Пт) 12:00

Хакер был прав. Это что же за картинки, что двухсот сорока мегабайт мало? Раровский архив размером 48,5 мегабайт через ReadFile всосался со свистом.
Но можно и без массивов.
Код: Выделить всё
Dim rs As New ADODB.Recordset
Dim st As New ADODB.Stream
st.Type = adTypeBinary
st.Open
st.LoadFromFile "c:\Photo.jpg"
rs.Fields.Append "Photo", adVarBinary, st.Size
rs.Open
rs.AddNew
rs(0).Value = st.Read
Однако мне начинает надоедать отвечать на детские вопросы, не имеющие отношения к тематике форума. :(
Включай уже голову.
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 15.01.2010 (Пт) 12:39

Вообще-то картинка всего 438 КБ (BMP), так что дело не в размере наверное.
В новом способе опять таже ошибка на той же строчке :?

rs.Fields.Append "Photo", adVarBinary, st.Size

Кто-то спрашивал про версию - у меня vb6.0 и на NET пока переходить нельзя, т.к. техника во многих регионах слабовата. Но в будущем возможно перейдём...

Почему не по теме форума? Ведь представление картинки как строки чего-либо, годного для помещения в XML - это часть вопроса по размещению картинки (фото) в XML...
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Передача фотографий в XML или ему подобном

Сообщение Antonariy » 15.01.2010 (Пт) 13:03

Не по теме, как считать бинарно файл, не по теме, почему файл не лезет в массив.

Тема — как передать байтовый массив через XML. Решение — преобразовать байты в набор символов, допустимых в значении узла. XML допускает все читаемые символы за исключением "<", ">" и "&" — они служебные. Мы рассмотрели две реализации — Base64 и HEX. Я предоствавил способ конвертации в HEX называемый "для ленивых", почему код, проверенный мной в Form_Load на сорокамеговом файле, не работает именно в твоих руках, вопрос не этого форума и мне не интересен. Можешь придумать свой. Концептуальное же решение твоей задачи представлено во втором предложении этого абзаца.
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 15.01.2010 (Пт) 13:14

Хорошо, спасибо! Буду пытаться...
А на какой версии тестировался последний пример? Кстати, от моих рук в данном случае, как я понимаю, зависела только полнота копирования. Утверждаю, что при этом процессе потерь и извращений кода примера с моей стороны не было. Разница только в том, что он выполняется не в FORM_LOAD, а по кнопке (Private Sub Command1_Click()).
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Передача фотографий в XML или ему подобном

Сообщение Rojohn » 15.01.2010 (Пт) 13:58

Короче, вроде как-то заработала! Видать кривая была картинка...
Выдаёт кучу знаков вопроса или два вопроса + квадрат (NULL в st.Read). Это нормально :?:

А вот первый способ (с массивом) выдаёт нормальные символы... Чёт не так с потоками наверное?
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Передача фотографий в XML или ему подобном

Сообщение Antonariy » 16.01.2010 (Сб) 15:42

Лучше выложи пример с нужным файлом, чтобы не гадать.
ADODB использовался версии 2.8
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Пример с потоками

Сообщение Rojohn » 18.01.2010 (Пн) 12:09

Выкладываю, но ничего нового там нет (специально сделал отдельный проект с примером)...
Example.rar
Пример для Antonariy...
(522.96 Кб) Скачиваний: 220
Последний раз редактировалось Rojohn 19.01.2010 (Вт) 14:08, всего редактировалось 2 раз(а).
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

След.

Вернуться в XML/XSL/XHTML

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList  
cron