Хранение файлов не в БД, а в каталоге
#1
Отправлено 29 Январь 2011 - 17:18
Естественно, чтобы CRM сама разруливала куда она ложит файл и сама формировала ссылку на скачивание.
Подозреваю, что такой функции встроенной нет, тогда как такое можно реализовать?
Дайте хоть направление и общую идею.
#2
Отправлено 31 Январь 2011 - 10:08
vasiliy.zorenko (29.1.2011, 17:18) писал:
vasiliy.zorenko (29.1.2011, 17:18) писал:
Дайте хоть направление и общую идею.
#3
Отправлено 11 Февраль 2011 - 14:12
#4
Отправлено 14 Февраль 2011 - 10:55
1. Проверяем, загружены ли файлы в поле с типом "файл". Для этого Вам необходимо проверить содержимое этого поля - там хранятся названия загруженных файлов. Если они там есть - читаем файлы из БД и переносим их в нужный Вам каталог. Фрагмент кода для чтения файла из БД:
$sqlQuery = "SELECT * FROM ".DATA_FILES_TABLE." WHERE table_id=".$table_id." AND field_id=".$field_id." AND line_id=".$line_id." AND name='".$name."' ORDER BY id"; $result = mysql_query($sqlQuery) or user_error(mysql_error()."<br>".$sqlQuery."<br>", E_USER_ERROR); while ($row = mysql_fetch_array($result)) { $content.= $row['content']; }(цикл while необходим т.к. файл хранится фрагментами по 500 кБ)
Здесь $table_id, $field_id, $line_id - соответственно id таблицы, поля и записи, в которые был загружен файл, $name - имя загруженного файла (берете из поля).
2. Записываете содержимое переменной $content в файл в нужном Вам каталоге. Алгоритм стандартный для php.
3. Формируете ссылку на файл в каталоге и записываете ее во второе (текстовое) поле.
4. Удаляете файл из БД (чистите содержимое поля типа "файл" и удаляете соответствующие записи из таблицы data_files)
#5
Отправлено 15 Февраль 2011 - 00:21
#6
Отправлено 15 Февраль 2011 - 09:21
$sqlQuery = "DELETE FROM ".DATA_FILES_TABLE." WHERE table_id=".$table_id." AND field_id=".$field_id." AND line_id=".$line_id." AND name='".$name."'"; mysql_query($sqlQuery) or user_error(mysql_error()."<br>".$sqlQuery."<br>", E_USER_ERROR);
#7
Отправлено 21 Февраль 2011 - 04:11
#8
Отправлено 21 Февраль 2011 - 21:45
#10
Отправлено 18 Апрель 2012 - 22:00
#11
Отправлено 19 Апрель 2012 - 02:24
Применил следующий вариант:
//Создаем папку для текущей заявки $text = substr($line['Дата'], 2, 2)."_".$line['Номер_ID']." ".$line['Клиент']['Название']; $line['Папка'] = mb_convert_encoding("D:\\_Заявки\\".$text, 'cp1251', 'auto'); if (!file_exists($line['Папка'])) mkdir($line['Папка']); //Перемещаем файл в папку данной заявки $full_dir = get_file_path(908, $ID, $line['Файл']); rename($full_dir, $line['Папка']."\\".mb_convert_encoding($line['Файл'], 'cp1251', 'auto'));Т.е. сначала создаем папку для заявки, а затем перемещаем туда файл, загруженный в поле с названием "Файл" типа "файл". Все отлично перемещается. Код пока пробный, надо будет вводить проверки на наличие файла, а если несколько файлов и т.д. Но никак не могу сообразить как в таблице убрать старую ссылку на файл и сделать новую.
CbCoder (14 Февраль 2011 - 10:55) писал:
4. Удаляете файл из БД (чистите содержимое поля типа "файл" и удаляете соответствующие записи из таблицы data_files)
Спасибо
#12
Отправлено 19 Апрель 2012 - 10:02
serg499 (18 Апрель 2012 - 22:00) писал:
#13
Отправлено 19 Апрель 2012 - 10:06
arsenal (19 Апрель 2012 - 02:24) писал:
arsenal (19 Апрель 2012 - 02:24) писал:
#14
Отправлено 19 Апрель 2012 - 10:38
CbCoder (19 Апрель 2012 - 10:06) писал:
#15
Отправлено 19 Апрель 2012 - 14:35
#16
Отправлено 19 Апрель 2012 - 14:42
#17
Отправлено 21 Май 2012 - 11:55
Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
Количество пользователей, читающих эту тему: 4
0 пользователей, 4 гостей, 0 анонимных