Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Преобразование картинки в строку (число прочтений - 16059 )
war_dendroid
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 1
Зарегистрирован: 07. Мая 2007
Преобразование картинки в строку
07. Мая 2007 :: 11:42
Печать  
Здравствуйте уважаемые участники.
Кто-нибудь сталкивался с преобразованием картинки в строку (неограниченной длины) и обратно для 1с версии 7.7 (сетевая или для sql). Интересует именно хранение картинки в базе как строки с преобразованием для отображения на форме. Если у кого-нибудь есть сведения или мысли по этой теме, откликнитесь пожалуйста.
Уважаю вас всех и каждого в отдельности.
Жду ответа. Денис.
  
Наверх
 
IP записан
 
desty
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Апреля 2007
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #1 - 07. Мая 2007 :: 12:01
Печать  
раз - http://www.1cpp.ru/forum/YaBB.pl?num=1160657213/0#0 - здесь вроде что-то было для SQL

и

два - http://www.1cpp.ru/forum/YaBB.pl?num=1172744522/0#0 - а здесь четкий ответ про хранение в БД, без промежуточной записи

ИМХО дилинные строки лучше не использовать. представляю что будет с таблицей _1sconst

в любом случае необходимо смотреть в сторону BinaryData

« Последняя редакция: 07. Мая 2007 :: 17:46 - desty »  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #2 - 07. Мая 2007 :: 12:16
Печать  
desty писал(а) 07. Мая 2007 :: 12:01:
ИМХО дилинные строки лучше не использовать. представляю что будет с таблицей _1sconst
Длинные строки и таблица _1sconst никак не связаны.
Это в dbf длинные строки хранятся в 1sblob.dbf, а в sql хранятся "там где положено" в полях таблиц типа text.

(0)
Имхо, без преобразования двоичных данных в строку, например по алгоритму base64, не обойтись.
Могу предложить только работу через временный файл. Есть простенькая консольная утилита:
http://dev.citykirov.ru/dlcount.php?url=base64.zip
Цитата:
консольная утилита для base64 кодирования/декодирования файлов
Использование: base64 <команда> <файл_источник> <файл_приемник>
<команда>
 e - кодирование (encode) файла-источника в файл-приемник с кодировкой Base64
 d - декодирование (decode) из файл_источника с кодировкой Base64 в файл-приемник

А вот уже прекодированный временный файл закидывать в базу посредством BinaryData.
« Последняя редакция: 08. Мая 2007 :: 11:07 - trad »  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #3 - 08. Мая 2007 :: 11:07
Печать  
trad писал(а) 07. Мая 2007 :: 12:16:
А вот уже прекодированный временный файл закидывать в базу посредством BinaryData.

ошибся. BinaryData тут не поможет.
  

1&&2&&3
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #4 - 08. Мая 2007 :: 12:28
Печать  
Что за черт Улыбка А зачем хранить картинки текстом?
Надо создать в базе свою таблицу с полем image и хранить их там.
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #5 - 08. Мая 2007 :: 16:10
Печать  
DmitrO писал(а) 08. Мая 2007 :: 12:28:
Что за черт Улыбка А зачем хранить картинки текстом?
Надо создать в базе свою таблицу с полем image и хранить их там.


А я бы спросил, а зачем хранить картинки вообще в SQL? скуль никогда не даст скорости доступа даже близкой к файловой системе.
Только база пухнуть будет.
Права на уровне ФС разруливаются прекрасно через WMI.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #6 - 09. Мая 2007 :: 05:36
Печать  
Цитата:
А я бы спросил, а зачем хранить картинки вообще в SQL? скуль никогда не даст скорости доступа даже близкой к файловой системе.
Только база пухнуть будет.
Права на уровне ФС разруливаются прекрасно через WMI.

Имхо утверждение абсолютно безосновательно.

По скорости: я думаю что скорость будет не меньше, а может и больше. Скорость передачи данных с MSSQL достаточно высока. Данные идут в чистом виде по TCP, я не вижу где там могут быть потери на самом процессе передачи. Используется точно такой же сокет и транспортная библиотека. Работает тот же стек протокола. Механизм получения данных BLOB ни чем не отличается от обычной передачи массива данных через сеть.

По позиционированию: (по некоторому идентификатору надо найти в хранилище блок данных для передачи) не думаю что индексы MSSQL менее эффективны чем индексы файловой системы (по именам файлов). Я опять же склонен считать что они гораздо более эффективны. Хотябы по тому что индексное выражение описывается в БД гораздо строже, кроме того идентификатор можно сделать просто int, да пространство значений индекса ограничивается одной базой/таблицей, а в файловой системе это иерархическое дерево строк(!), да еще и по всему тому.

По оптимальности хранения: как не крути, а картинка это часть данных и должна храниться в базе данных, это ведь удобнее. По физически занимаемому месту в файловой системе можно получить выигрышь за счет более мелкого кластера, в MSSQL страница 8к и ни куда не денешься. Имхо это не существенно на самом деле, кто щас место считает Улыбка

С практической точки зрения: при работе через файловую систему будет работать служба доступа на sql-ном сервере, а у нее на таких серверах приоритет понижен, ее файловый кэш уменьшен, сервер сконфигурирован как сервер приложений, а не как файловый сервер. Однако при хранении картинок в БД при существующих на данных момент средствах 1cpp нам придется сначала стянуть ее на локальный диск во временный файл, а потом из него уже получить объект Картинка для отображения, а при хранении в файловой системе мы можем получить объект Картинка сразу с сервера. Формировать экземпляры объектов Картинка из данных рекордсета конечно же можно, но это не сделано, это было бы еще эффектинее.

Вообще говоря, надо провести тестирование, оно даст наиболее точные с практической точки зрения результаты. Улыбка
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #7 - 09. Мая 2007 :: 16:47
Печать  
Все написанное верно. Но есть масса и других доводов. 1С вертится скорее всего на том же sql, а sql сервера всегда бывает мало. Зачем его нагружать не совсем свойственной ему задачей.
С другой стороны, если понадобится проверить часть файлов на разрешение, кол-во цветов, получить exif данные, то придется все эти файлы опять же сперва сохранить локально. Да много чего можно вспомнить...
В теории хранить можно, и даже где-то нужно, так как хранилище для всех данных будет в одном месте.
Но вот у меня больше 20000 жпегов, и занимают около 10 Гб. Только бэкап скуля будет занимать сколько времени...
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #8 - 09. Июня 2007 :: 04:53
Печать  
Храним в текстовом поле сертификаты( работает года 4)
Для этого был написан COM объект (Лежит на проклубе)
База 1с77 УРБД. Все остальные способы по хранению и передачи сертификатов оказались неудобными.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #9 - 09. Июня 2007 :: 06:27
Печать  
Z1 писал(а) 09. Июня 2007 :: 04:53:
Храним в текстовом поле сертификаты( работает года 4)
Для этого был написан COM объект (Лежит на проклубе)
База 1с77 УРБД. Все остальные способы по хранению и передачи сертификатов оказались неудобными.

а можешь ссылку показать?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #10 - 09. Июня 2007 :: 07:12
Печать  
JohnyDeath писал(а) 09. Июня 2007 :: 06:27:
[quote author=Z1

а можешь ссылку показать? [/quote]

http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=3163
Последняя версия компоненты прикреплена
Описание и как ставить в архиве с проклуба
  

bfile_1c.zip ( 9 KB | Загрузки )
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Преобразование картинки в строку
Ответ #11 - 09. Июня 2007 :: 09:39
Печать  
JohnyDeath писал(а) 09. Июня 2007 :: 06:27:
Z1 писал(а) 09. Июня 2007 :: 04:53:
Храним в текстовом поле сертификаты( работает года 4)
Для этого был написан COM объект (Лежит на проклубе)
База 1с77 УРБД. Все остальные способы по хранению и передачи сертификатов оказались неудобными.

а можешь ссылку показать?

На самом деле задача преобразования бинарного файла в строку достаточно несложная.
Если занимаешься ВК, можешь сам быстро написать. У меня года два успешно работают два метода - ФайлВСтроку() и СтрокаВФайл(). Код могу подарить (но на VB6). А могу просто идею сказать, сам напишешь.
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #12 - 09. Июня 2007 :: 10:25
Печать  
vip писал(а) 09. Июня 2007 :: 09:39:
JohnyDeath писал(а) 09. Июня 2007 :: 06:27:
Z1 писал(а) 09. Июня 2007 :: 04:53:
Храним в текстовом поле сертификаты( работает года 4)
Для этого был написан COM объект (Лежит на проклубе)
База 1с77 УРБД. Все остальные способы по хранению и передачи сертификатов оказались неудобными.

а можешь ссылку показать?

На самом деле задача преобразования бинарного файла в строку достаточно несложная.
Если занимаешься ВК, можешь сам быстро написать. У меня года два успешно работают два метода - ФайлВСтроку() и СтрокаВФайл(). Код могу подарить (но на VB6). А могу просто идею сказать, сам напишешь.

К сожелению ВК не занимаюсь. Печаль
Почитал про вариант Z1. Там надо запускать экзэшник, который должен постоянно пахать. ИМХО, как-то не очень красиво. И сразу задался вопросом: "а почему не сделали тоже самое, но в виде ВК?". Оказывается сделали.  Улыбка
не мог бы выложить?  Круглые глаза
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Преобразование картинки в строку
Ответ #13 - 09. Июня 2007 :: 10:54
Печать  
"Почитал про вариант Z1. Там надо запускать экзэшник, который должен постоянно пахать."
В exe храним внешний COM объект ( полная аналогия с dll). Exe файл не надо запускать всегда. Первый раз запускается только для саморегистрации объекта .
Далее при создании объекта в 1с Windows запускает объект,
при удалении объекта внутри 1с Windows уничтожает объект.
Я не настаиваю что мое решение единственно правильное.
в чем плюсы моего решения :
1. работает очень быстро ( написано на С++ и еще оптимизировал си-код)
2.при создании цель была чтобы бинарный файл как можно меньше занимал место внутри базы 1с ( из-за УРБД)
3. работает с 1с ( 1с не допускает в строковых реквизитах символ 0x00 ).
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Преобразование картинки в строку
Ответ #14 - 09. Июня 2007 :: 10:55
Печать  
Цитата:
Оказывается сделали.   
не мог бы выложить? 

К сожалению, нет. Пишу только для себя и поэтому внутри ВК полное безобразие. Это только кусочек многочисленных методов, которые никому, кроме меня не нужны. Тем более пишу на VB. Стыдно Улыбка А решениями поделиться могу.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать