Хранение изображений в сетевом каталоге




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

52 Comments

  1. ivanov660

    На сколько я понял, речь идет о примере для «своей» конфигурации. На мой взгляд удобнее использовать механизмы БСП «присоединенные файлы» или «файлы».

    В примере присутствует много листинга, но возможно чего-то не хватает; для этого случая хорошо было бы выложить cf.

    Мне очень не понравилась практика названия реквизитов как «объект».

    Reply
  2. Farzar

    Написано на типовой как раз БСП переделан чтоб в SQL не хранить файлы. Листинг рабочий но получился большой. Будьте внимательны с событиями формы. Если ошибки есть или сложности пишите.

    Reply
  3. hotey

    (2) Farzar, Вы же пишете, что делаете это для УПП, КА. Разве там используется БСП?

    А у БСП есть свои настройки для хранения файлов в томах на диске.

    Reply
  4. Farzar

    Типовые конфигурации, где используются управляемые формы написаны на базе БСП от этого отталкивался

    Reply
  5. omut

    (3) hotey, в КА используются точно )

    Reply
  6. нормальный такой

    в скуле всё равно безопаснее хранить 🙂

    Reply
  7. nSpirit2

    Автор конечно молодец работа с файлами без попытки доставляет. Я так понимаю это сделано для файловой базы данных?

    Reply
  8. insurgut

    Конечно все зависит от размеров организации и объема номенклатуры, с которой она работает.

    Реализовал аналогично в относительно небольшой организации (число номенклатурных позиций не больше 100 000), путь к сетевому каталогу храним в константе, картинка при выборе ее пользователем автоматом копируется на сетевой ресурс с именем, равным коду номенклатуры. Много лет — полет нормальный.

    Для того, чтобы пользователи на сетевом ресурсе не грохнули картинки, защита от дурака — сетевой ресурс скрываем символом $ в имени ресурса.

    Reply
  9. Farzar

    Скорее для серверной, файловая при больших объемах все равно не выживет. Когда у вас 2000 позиций и еще 5000 характеристик в этом случае Вы экономите пару гигабайт.

    Reply
  10. nSpirit2

    (8) Farzar, А смысл при использовании SQL хранить данные в отдельно лежащей папке на файловой системе вы думаете так быстрее будет ?

    Reply
  11. Farzar

    Главное экономия места и время выполнения резервного архива и например отчет «Остатки в картинках» работает чуть быстрее.

    Reply
  12. CatMix

    По мне так плохой метод.

    Какой-нить пользователь удалит картинки с общего ресурса или переместит их в другое место и всё?

    Или Вы не разрешаете пользователям добавлять номенклатуру и редактировать изображения?

    Как это всё разворачивать быстро на другом сервере?

    Если экономите место в базе, почему не вынести картинку в другую sql базу?

    Если скорость то лучше переместить таблицу с файлами на другой раздел/сервер итд?

    Reply
  13. нормальный такой

    (9) nSpirit2, на самом деле с файлами быстрее работается… но я с вами солидарен, смысл хранить в файлах, если пользуется скуль.

    в общем, велосипед на любителя…

    (10) Farzar, никакой экономии времени на резервное копирование нет, это миф. да и + к тому это не безопасно. вот нападет какой-нибудь вирь и пожрет ваши картинки и документы

    Когда данные лежат в едином месте, как единое целое, вот тут вы экономите время на резервное копирование и перенос «в случае чего»…

    У нас была похожая практика использования файлов на сетевом ресурсе, но это бред и мы от этого ушли, когда объём файлов стал > 350ГБ и число этих файлов перевалило за 2 000 000

    Если сильно захотеть, можно использовать скульный FileStream, тогда и файлы получатся как файлы и вроде как бы в скуле.

    Reply
  14. Farzar

    (11) CatMix,

    Мое личное мнение не претендующее на единственное верное.

    Отвечу по пунктам:

    Какой-нить пользователь удалит картинки с общего ресурса или переместит их в другое место и всё?

    Или Вы не разрешаете пользователям добавлять номенклатуру и редактировать изображения?

    — пользователь пути к картинке не видит, полный путь в константе.

    Как это всё разворачивать быстро на другом сервере?

    — константе задаем новый путь, копируем директорию

    Если экономите место в базе, почему не вынести картинку в другую sql базу? — не вижу смысла хранить бинарные неструктурированные данные в скл.

    Если скорость то лучше переместить таблицу с файлами на другой раздел/сервер итд? — более сложный вариант.

    Reply
  15. alyaev.a.v

    Так и не понял, если есть БСП с механизмом хранения в томах на дисках, зачем велосипед?

    Reply
  16. Kyrales

    А как быть если распределенная база?

    Reply
  17. insurgut

    (15) alyaev.a.v, насколько понимаю, тут конкретный пример доработки типовой УТ 10.3. Доработать только эту часть, либо встраивать БСП в УТ 10.3 и все равно делать какие-то доработки? Тут каждый решает сам для себя 🙂

    Reply
  18. Farzar

    Из статьи

    http://infostart.ru/public/190375/

    Реально самописки делают по двум причинам:

    1. хочется выкинуть лишнее и получить быстрое, в этом варианте БСП подходит только для самого минимума функций, по тому что БСП это более менее универсальный монстр с кучей «лишнего»

    2. есть принципиальные расхождения требуемых алгоритмов от того что есть в типовых, в данном случае то же БСП не сильно подходит.

    Reply
  19. Farzar

    (18) Kyrales,

    Первое что приходит на ум включить в план обмена регистр Изображения далее в константе ПутьККартинкамНаСервере указать новый путь.

    Возможно несколько вариантов пути:

    1. Дописать к плану обмена копирование файлов при отправке и при получении данных.

    2. Простой если скорость интернета позволяет можно расшарить ресурс, не забывая о безопастности, поставить запрет на редактирования из подчиненной базы.

    3. и тд.

    Reply
  20. insurgut

    Первое, что приходит на ум, облачные сервисы 🙂 Яндекс.Диск например, дешево и сердито, практически 0 строчек кода доработки.

    Reply
  21. monkbest

    Все тут говорят про БСП, как про некую панацею. Мол если 1С создало БСП, то нафига велосипед городить.

    БСП бывает разных версий. В УТ 10.3, УПП 1.3, Бух 2.0 она тоже есть, в них есть куча общих одинаковых для всех конфигураций модулей с полезными функциями.

    Для управляемых форм в БСП есть механизмы по хранению файлами, но Вы пробовали посмотреть код, которым это реализовано? Там черт ногу сломает. А что если завтра БСП обновят? Все переписывать?

    Для таких задач — только самописки потому, что:

    1. Дешевле в разработке

    2. Читабельный код, который через 2 года другой специалист поймет (если кодер не ушлепок:) )

    3. Быстрее работает (100%)

    4. Решает конкретную задачу, и делается под хотелки заказчика, а не универсально для всех на свете ООО. Самописка — всегда удобнее (если кодер не ушлепок:) )

    5. Меньшая зависимость от смены релизов

    Reply
  22. OBEH

    (22)Все так пафосно. «Является правильным и хорошим тоном…», «Писать на 1с не зная БСП это как на С++ без STL…» и т.д.

    Сравнение 1С(с ее БСП) и «С++ без STL», вообще, поражает дикостью.

    В (21) верно подмечено. Сам не раз в этом убеждался. А работа «из коробки» у фирмы 1С имеет только смысл, что «вроде как работает и ладно».

    Reply
  23. monkbest

    (22) nSpirit2, вы хоть раз открывали модули отвечающие за работу с файлами в БСП? Видимо, нет. Я открывал.

    По претензиям ко мне:

    1. дешевле = потратить меньше времени на разработку. Такие мелкие задачи обычно оплачиваются по факту отработанного времени

    2. я не ругал БСП, я просто довожу до сведенья незнающих, он сложна. Хотя, ДА — Я хорошего мнения о своих способностях, как разработчика. Да и опыт у меня богатый. Но авторов БСП не ставлю ниже себя:)

    допустим ситуация:

    прихожу к клиенту с почасовой оплатой, работа на месте, сколько отработал, столько получил, задачи заранее не известны, их много и они небольшие, меня просят к документу реализации чтоб можно было скан цеплять

    что я должен делать? Пару часов смотреть в модули БСП, потом час вкрячивать туда своё и выдать потом решение не очень удобное в плане интерфеса? И объяснять менеджерам, что это не удобно, зато универсально. Да им пое**ть, что это решение универсально и будет рабоать на соседнем заводе так же хорошо, как в их фирме. им нужно хорошо у них, а директору надо быстро, потому что время — деньги.

    нет я за 15 минут набрасываю регистр сведений и рисую в документе пару кнопок (добавить, просмотреть файл), выгоняю на 5 минут всех из базы, сохраняюсь проверяю и все! и перехожу к следующе задаче

    в БСП учитывается много фишек, оно работает в web клиенте, в серверной базе, в файловой… все это круто, но надо решать конкретные задачи. Самые живучие решения — простые, их потом легко трансформировать под новые обстоятельства.

    Reply
  24. OBEH

    (24)»за 15 минут набрасываю регистр сведений и рисую в документе пару кнопок…»

    Ага. Был у меня случай с «чудо программистом». Писал все влет… регистры, документы, справочники. Просто скорость поражала и такое знание языка.

    Хорошо, что нашел время потестить это чудо мысли. Я ужаснулся реализации. Там, при изменении конфы, пришлось бы каждый раз его вызывать.

    Снес его поделку и решил, по максимуму, штатными средствами. Не так быстро, довольно прилично призадумываясь, что можно использовать из того, что уже есть.

    Работает несколько лет и не просит кушать.

    Так что использование штатных возможностей, на мой взгляд, должно быть не на последнем месте.

    Reply
  25. nSpirit2

    (24) monkbest, Это называется методом костыльного программирования. Они захотели я им сделал за 15 минут костыль. Они захотел хранить еще и сканы договоров. Я и там сделал костыль… Хотя БСП с точки зрения интерфейса тут каркас позволяет хранить все файлы однообразно… А еще вы точно за 15 минут написали все проверки на существование.. Проверку доступа и прочие вещи которые надо написать при работе с файлами…

    вы хоть раз открывали модули отвечающие за работу с файлами в БСП?

    Не поверите да и всем доволен.

    Reply
  26. monkbest

    (25) OBEH, БСП входит в состав конфигураций, но не все его механизмы везде задействованы во всех объектах. Например 1С Бухгалтерии 3.0 есть БСП последней версии, в которой реализована работа с хранением файлов. Но это не значит, что вы можете прикрепить произвольный файл к документу «реализация товаров и услуг» быстро и удобно

    Есть справочник файлов. Есть доп.сведенья, в которых можно указывать тип значения — «файл». Это стандартные подсистемы.

    Но, чтобы прикрепить файл к документы, надо:

    1. Записать документ

    2. Нажать кнопку доп сведенья

    3. Начать редактировать сведенье, в котором лежит файл

    4. Из списка всех файлов в справочнике выбрать нужный, а там его, т.е. нажать кнопку создать

    5. Сохранить файл в справочнике.

    6. Выбрать в доп сведенье элемент справочника.

    Это не удобно. Каждый руководитель сам принимает решение «ломать» «не ломать». Если ломать, то он думает «А по чем?».

    Ломание механизмов БСП — дорого, аукнется при обновлении еще дороже.

    Reply
  27. monkbest

    (26) nSpirit2, мои костыли прочные и красивые, не переживайте, работаю годами. Я сам порой забываю об их существовании, настолько они органично врастают в систему и в жизнь предприятия, как будто они тут были еще до меня, со времен установки типовой конфигурации

    Reply
  28. OBEH

    (26) «всем доволен….».

    По моему, это клиника. Особенно, применительно к 1С.

    Reply
  29. insurgut

    (22) nSpirit2,

    Знаете что я хочу сказать использование стандартных механизмов. Является правильным и хорошим тоном

    Одно дело, когда есть исходный функционал в конфигурации, тут да, моветон. Но когда конфигурацию необходимо этим функционалом дорабатывать, что бы потом его использовать — тут уже можно и поспорить 🙂

    Reply
  30. nSpirit2

    (29) OBEH, Ну да все прекрасно работает… Вам не нравиться 1С. Напишите что нибудь свое умное и хорошее. Боюсь все проблемы 1С вытекают из того что она и так вам жизнь упрощает в плане программирования как может.

    (30) insurgut, Вот с вами я полностью согласен. Ну чтобы не попасть в просак каркас следует знать типовой функционал. Причем я именно говорю о том какие функции торчат из БСП наружу. Что бы не написать свой деревянный велосипед.

    В конечном итоге костыли всегда оставаться костылями. И потом при переходе при смене редакции тот кто будет это делать заставят вас икать за ваш костыль.

    Reply
  31. OBEH

    Станет все проще, если понять, что 1С торгует платформой и коробками с описанием языка и примерами прикладных решений на этой платформе.

    Именно, примерами, а не законченными решениями.

    Поэтому «Все прекрасно работает», если предприятие подгонять под этот пример.

    Так что все, кто хочет реально работать, берут напильник и пилят этот самый пример для себя.

    Reply
  32. Yashazz

    Курочить конфу, когда можно обойтись штатными средствами, да и безо всяких БСП — жуть.

    Делается просто:

    1. Добавляется доп.свойство справочника, хранящее строковый адрес картинки;

    2. Добавляется внешняя печатная форма, привязанная к карточке номенклатуры, суть которой в работе с картинкой (выбор, показ, файловые операции);

    3. Добавляется внешняя обработка, групповой менеджер картинок, настроек работы с ними (кои хранятся в общем хранилище настроек) и прочая.

    Всё.

    Reply
  33. Farzar

    (33) Yashazz, Ваш ход мыслей верный в плане того что можно не редактировать типовую конфу. ЕЕ легко ОБНОВЛЯТЬ.

    Но в примере минимум изменений кода в форме номенклатуры:

    1. ПоказатьИзображение —

    Форма = ОткрытьФорму(«ОбщаяФорма.ФормаИзображения», , ЭтаФорма);

    2. ОткрытьИзображение —

    ЭлементыФормы.ОсновноеИзображение.Картинка = Добавленные.ПоказатьКартинкуИзРегистра(ЭтотОбъект.Ссылка);

    Основной код в отдельном общем модуле и общей форме которые не будут обновляться.

    Разница только в том где хранить код в отдельном общем модуле или во внешней обработке.

    Reply
  34. monkbest

    (33) Yashazz, хорошая мысль, мне нравится. Помимо печатных форм еще есть и обработки заполнения, которые тоже везде можно присоединить.

    единственное, сложно будет реализовать для незаписанного объекта

    Reply
  35. PiccaHut001

    (0) хорошее решение, сам так делал

    Reply
  36. kosmo0

    Я один заметил что не будет работать код (в цикл не зайдет)

    Функция ПолучитьЧастьСтрокиОтделеннойСимволом(Знач ИсходнаяСтрока, Знач СимволПоиска)

    ПозицияСимвола = СтрДлина(ИсходнаяСтрока);

    Пока ПозицияСимвола = 1 Цикл

    Reply
  37. kosmo0

    (33) Ограничение — работа с ЕДИНСТВЕННЫМ изображением. Иногда этого не достаточно (ну либо опять воротить костыли).

    Reply
  38. Farzar

    (37) kosmo0,

    Должно быть так:

    Пока ПозицияСимвола >= 1 Цикл

    Скорее при вставке глюк, спасибо коммент.

    Reply
  39. Farzar

    (38) kosmo0, Костыли воротить не надо, добавьте в форму только две кнопочки вперед и назад:

    Попытка
    //назад +1
    Номер = ТекущиеИзображение -1;
    ОснованаяКартинка = новый Картинка(ПутьКСерверу+мКартинки[Номер].Путь);
    ЭлементыФормы.ОсновноеИзображение.картинка = ОснованаяКартинка;
    ТекущиеИзображение = Номер;
    Исключение
    КонецПопытки;

    Reply
  40. echo77

    Поправьте, пожалуйста, ошибки

    Опишу в вкратце действия

    В модель формы пишу код

    4. Добавляю общею форму

    Reply
  41. Farzar

    (41) echo77, исправил, большое спасибо.

    Только подсветка кода слетела, после сохранения..

    Reply
  42. kosmo0

    (33) (40) Сначала. Что понимается под термином «свойство»? Я предполагал что это типа из УПП свойства объектов, на основе Планов видов характеристик. Если я понял правильно, то будете создавать свойства «Картинка1», «Картинка2» и далее? А если какому-то элементу нужно будет 30 картинок?

    Reply
  43. alexey_kurdyukov

    (13) insurgut, Делал так же, еще на самописной семерке, а все операции над изображением производил с помощью командной строки IrfanView.

    Reply
  44. hazd

    тоже страдаем раздуванием базы, а как быть если распределенная база?

    Reply
  45. insurgut

    (45) hazd, Яндекс.Диск или OneDrive вам в помощь. Проще уже некуда 🙂

    Reply
  46. IgorArhangel

    Интересно данный материал нормально будет работать на УТП 8..2?

    Просто стандартные методы забиваю оперативную память в хлам. Работать просто не возможно.

    Reply
  47. IgorArhangel

    Начал делать все по инструкции и на конечном этапе выплыла такая вот ошибка:

    {Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(56)}: Ошибка при установке значения атрибута контекста (Картинка)
    ЭлементыФормы.ОсновноеИзображение.Картинка = Добавленные.ПоказатьКартинкуИзРегистра(ЭтотОбъект.Ссылка);
    по причине:
    Несоответствие типов

    Странно правда.

    ОсновноеИзображение имеет тип поле картинки.

    2. Создаю регистр сведений ИзображенияНоменклатуры с двумя измерениями Объект (Справочник.Номенклатура), Путь (Строка, 255) и реквизитом Основное (Булево).

    Вот это все так же сделано.

    Может кто подскажет кудой копать?

    Reply
  48. IgorArhangel

    Все разобрался..

    У Вас в коде нужно поправить в двух местах:

    Если ФайлКартинки.Существует() и СтрДлина(мКартинки[0].Путь) > 0 тогда

    Я сначала поставил = , а как оказалось нужно было поставить <>.

    Reply
  49. IgorArhangel

    Чуть переделал данное решение с полем HTML

    Ну это не суть важно.

    Мне интересно как открыть форму изображения например при клике на миниатюру в подборе или в справочнике.

    П = Новый Структура(«Ключ», ТекущиеДанныеСписка.Ссылка);
    ФормаНоменклатуры = ПолучитьФорму(«Справочник.Номенклатура.Форма.ФормаЭлемента», П);
    Форма = ОткрытьФорму(«ОбщаяФорма.ФормаИзображения», , ФормаНоменклатуры);

    То есть передаю владельца формы в третьем параметре, но ничего не открывается, а если перед выводом формы Открыть форму Номенклатуры:

    ФормаНоменклатуры.Открыть();
    

    Тогда открывается и форма элемента и форма Изображения

    Можно ли как-то сделать чтобы просто открывалась форма изображения?

    Reply
  50. IgorArhangel

    Все сделал. У меня все получилось.

    Теперь оперативная память не забивается.

    Поле HTML рулит.

    Если что обращайтесь. Подскажу.

    Reply
  51. VZhulanov

    А никто не рассматривал смешанный вариант хранения картинок?

    1. все картинки хранятся на диске/фтп/облаке

    2. в БД есть регистр/справочник, в котором хранится путь к картинке и на который ссылаются нужные справочники (товары, сертификаты, клиенты и прочее)

    этот регистр/справочник общий для всех баз в распределенке

    3. в БД есть «локальный кеш» справочник/регистр, в котором хранятся сами картинки, к которым было обращение за последний месяц.

    Этот справочник исключительно локальный и в обменах не участвует. Его без проблем можно чистить каждый месяц или вообще не чистить.

    Можно картинки в нем хранить не по дате обращения, а по количеству обращений.

    Таки образом получаем и возможность хранения огромного количества картинок (любых файлов) без раздувания БД

    И за счет локального «кэша» картинок в самой базе получаем быстрый доступ к часто используемым картинкам, что уменьшает количество тормозов при хранении в сети/облаке/фтп

    Причем размером локального кеша (размером БД) можно управлять без потери данных.

    Reply
  52. IgorArhangel

    (52) VZhulanov, как вариант имеет право на существование. Я сейчас примерно так и сделал. Все фото хранятся в Dropbox локально на каждом сервере. Dropbox запущен службой. И мне достаточно добавить новые фотографии на одном сервере и фотки загрузятся на остальные.

    Вариант с часто используемыми нормальный, НО в подборе используется отображение картинки и получается, что все картинки будут тащиться в кеш.

    А позиций более 8000.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *