Cfile savefile не работает

SaveFile

Описание и параметры

Метод сохраняет файл и регистрирует его в таблице файлов (b_file). Статический метод.

Параметры

Параметр Описание С версии
file Массив с данными файла формата:

Массив такого вида может быть получен, например, объединением массивов $_FILES[имя поля] и Array(«del» => $<"имя поля"."_del">, «MODULE_ID» = «название модуля»); save_path Путь к папке в которой хранятся файлы (относительно папки /upload). ForceMD5 Необязательный. По умолчанию false. 7.0.0 SkipExt Необязательный. По умолчанию false. 7.0.0 dirAdd 7.0.0 checkDuplicates Проверка на дубли. Необязательный. По умолчанию true. 7.0.0

Возвращаемое значение

Метод возвращает числовой идентификатор сохранённого и зарегистрированного в системе файла.

Смотрите также

Примеры использования

Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Источник

Deen812

ТВОРИТЬ — ВОТ НАСЛАЖДЕНИЕ!

линия

четверг, 16 ноября 2017 г.

Bitrix: ajax загрузка фото или облегчаем себе жизнь

Недавно случился казус. Поступила задача, прикрутить к форме отправки сообщений возможность прикрепить файлы. И чтобы был прогрессбар и смотрелось сие дело чинно и красиво. Да, задача решаема, особых сложностей не вызывает. В молодости, я имел вредную привычку, решать задачи в лоб. Но теперь то я не такой и зеленый. Практически на стадии зрелости. Первым делом отошел от компьютера и посмотрел в окно. На улице шел снег. Наконец то грязная последняя стадия осени сдалась и все стало бело. Всматриваясь в даль вдруг меня осенило — по любому в битриксе есть встроенный компонент для загрузки файлов. И я сильно удивился, когда такой имелся. Обрадовался я кончено дико. Визжал от радости как подросток.

Ближе к делу

Итак, что имеем:
Обычная форма. При клике на отправить обрабатывается JQUERY и предает данные в /inlude/ajax/form.php. Разумеется все работает AJAX-ом.

Теперь добавляем в шаблон формы компонент:

Ищем компонент в /bitrix/components/main.file.input/ копируем шаблон в шаблон сайта. переименуем шаблон в drag_n_drop — на случай если будем менять стили.

Открываем форму и видим такую красоту:

Кстати, можно сделать мульти загрузку, задать маску входных файлов.
Компонент загружает файл в /upload/main/ и после загрузки возвращает id файла.

Источник

Класс CFile

Описание и поля

Класс для работы с файлами и изображениями.

Аналог класса в новом ядре D7 — Bitrix\Main\FileTable.

Поле Тип Описание
ID int ID файла.
TIMESTAMP_X timestamp Дата изменения записи.
MODULE_ID varchar(50) Идентификатор модуля которому принадлежит файл.
HEIGHT int Высота изображения (если файл — графический).
WIDTH int Ширина изображения (если файл — графический).
FILE_SIZE int Размер файла (байт).
CONTENT_TYPE varchar(255) MIME тип файла.
SUBDIR varchar(255) Подкаталог в котором находится файл на диске. Основной каталог для хранения файлов задается в параметре «Папка по умолчанию для загрузки файлов» в настройках главного модуля, значение данного параметра программно можно получить с помощью вызова метода:
FILE_NAME varchar(255) Имя файла на диске сервера.
ORIGINAL_NAME varchar(255) Оригинальное имя файла в момент загрузки его на сервер.
DESCRIPTION varchar(255) Описание файла.

Список методов

Метод Описание с версии
GetByID Возвращает информацию по одному зарегистрированному файлу. 3.1.6
GetList Возвращает отсортированную и отфильтрованную выборку зарегистрированных файлов. 7.0.2
GetPath Метод возвращает путь от корня сайта к зарегистрированному файлу. 3.3.21
ShowImage Возвращает HTML для показа изображения.
Show2Images Возвращает HTML для показа изображения при клике на которое в отдельном окне отображается другое изображение. 3.2.1
CheckFile Проверяет размер, расширение и mime тип файла. В случае ошибки метод вернет строку с текстом ошибки.
CheckImageFile Проверяет что файл является картинкой и проверяет ее параметры. В случае ошибки метод вернет строку с текстом ошибки.
IsImage Метод проверяет расширение и заданный MIME тип файла. Если расширение и MIME тип файла соответствуют изображению, то возвращает «true», иначе «false». 3.3.18
MakeFileArray Метод формирует массив описывающий файл. Структура массива аналогична структуре массива $_FILES[имя] (или $HTTP_POST_FILES[имя]). Данный массив может быть использован в методах CFile::SaveFile, CFile::CheckFile, CFile::CheckImageFile. 3.2.9
InputFile Возвращает HTML код предназначенный для загрузки нового, либо замены существующего файла.
SaveFile Сохраняет файл и регистрирует его в таблице файлов.
SaveForDB Сохраняет файл и подготавливает данные для вставки/обновления записи в БД, содержащей ссылку на файл 7.1.0
UpdateDesc Обновляет описание к зарегистрированному файлу. 3.3.21
CopyFile Копирует зарегистрированный файл. 3.0.14
Delete Удаляет файл из таблицы зарегистрированных файлов и с диска.
FormatSize Метод переводит байты в единицы с учетом языка, установленного в текущем сайта.. 8.6.4
GetFileArray Возвращает массив описывающий файл с заданным идентификатором. 5.1.8
ResizeImageFile Метод производит изменение размера графического файла 7.1.1
ResizeImageGet Метод уменьшает картинку. 7.1.1
ResizeImage Обертка ResizeImageFile 7.1.1

Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Источник

Отдельная директория для файлов инфоблока

По умолчанию для всех файлов инфоблоков используется общая папка /upload/iblock/. Файлы сохраняются в подпапки, сгенерированные случайным образом, например, /upload/iblock/ff7/.
Как следствие, все файлы доступны по прямой ссылке. В целом, в этом нет ничего страшного, так как итоговый путь (при условии, что файл отдается через php) сложно подобрать. Но в некоторых случаях требуются дополнительные меры безопасности.

Основная идея – как-то вынести файлы инфоблока в отдельную подпапку и закрыть её с помощью стандартных механизмов nginx / apache.
Небольшим дополнительным плюсом будет то, что можно достаточно просто посмотреть, сколько места занимают файлы отдельного инфоблока.

Суть в следующем: в методе CFile::SaveFile второй параметр ($strSavePath) отвечает за директорию внутри папки upload. Инфоблоки его передают как «iblock», нам надо его заменить.

  1. Код, приведенный ниже не рекомендуется к использованию, но в целом он позволяет решить задачу (и, в том числе, работает, как в публичной, так и в административной части).
  2. Случай, когда файлы хранятся в облаке, не рассматривается.
  3. Скачать исходники. В случае включения в код «как-есть» необходимо прописать пути в методе loadPaths

Регистрируем обработчик на событие OnFileSave. Обработчик будет вызван при сохранении файла. В обработчике каким-то способом получаем ID инфоблока, файл которого сохраняется. Сохраняем файл физически и возвращаем true.

    Регистрируем обработчик на событие OnFileSave модуля main.

Тут есть несколько важных моментов:

  • Во-первых, как в методе CFile::SaveFile, так и в обработчике у нас нет идентификатора инфоблока.
  • Во-вторых, $strSavePath в обработчик передается по значению, а не по ссылке, поэтому изменить его просто так не получится.
  • Во-третьих, обработчик позволяет только определить собственный способ физического сохранения файла, в таблицу b_file пишет сам метод CFile::SaveFile.

Узнать ID инфоблока в обработчике можно несколькими путями:

  • Путь 1: Значение из $_REQUEST.
    При редактировании элемента в административной части url имеет вид /bitrix/admin/iblock_element_edit.php?IBLOCK_ID=170&type=catalog&ID=388118&lang=ru&find_section_section=-1&WF=Y
    и, соответственно, в $_REQUEST у нас есть IBLOCK_ID
    Этот метод не универсален, т.к. не поддерживает добавление с помощью API (например, из публичной части).
    Кроме того, при сохранении элемента может возникнуть ситуация, когда надо добавить элемент с файлом в другой инфоблок.
  • Путь 2: Сохранение инфоблока во время вызова события в статический член класса
    На событиях обновления OnBeforeIBlockElementUpdate, OnAfterIBlockElementUpdate и OnIBlockElementSetPropertyValues сохранять в статический член класса ID инфоблока.
    В данном случае нет нужного события (onBefore) для метода CIBlockElement::SetPropertyValuesEx
    Кроме того, проблема с добавлением элемента с файлом в другой инфоблок также остается
  • Путь 3: Через функцию debug_backtrace().
    Это ресурсозатратно, но узнать ID инфоблока можно более точно, чем в предыдущих методах.
  • В классе, который будет использоваться, содержится как сам метод обработчика onFileSave, так и вспомогательные методы. Сокращенный файл класса: Созданы отдельные методы, которые позволяют получить/установить пути сохранения файлов для каждого инфоблока. Метод установки вызывается в конструкторе
  • В обработчике события (метод onFileSave) выполняем все действия только если $strSavePath == «iblock»
  • В обработчике вызываем debug_backtrace(), анализируем полученную информацию, чтобы узнать ID инфоблока
  • После того, как мы узнали инфоблок (если его вообще удалось определить), смотрим, нужен ли ему отдельный путь, и есть да, то производим сохранение файла, возвращая из метода true.
  • Сохраняем файл. Согласно назначению события OnFileSave, файл может быть как-то сохранен. Код для метода сохранения практически полностью скопирован из CFile::SaveFile.
    Т.е. сохраняем физически файл именно так, как это делает сам Битрикс (учитывая все настройки модуля main)

    В целом можно и повторно вызывать CFile::SaveFile с новым путем, а затем удалить вручную запись из базы (но делать так по вполне понятным причинам не стоит)
    Обновляем поля $arFile

  • После того, как файл сохранен, возвращаем true
  • Все новые файлы нужных нам инфоблоков с этого момента будут в отдельной папке.

    Источник

    Массовое добавление картинок с другого сайта

    Есть массив с картинками

    Картинка точно есть.

    Цитата
    Антон Долганин пишет:
    Можно для начала попробовать

    ну если кодировка у строки верна.

    Цитата
    Артур Нойманн пишет:
    но все равно не работает
    Цитата
    Артур Нойманн пишет:
    но все равно не работает

    Цитата
    Антон Долганин пишет:
    Тогда ничем уже тут не поможешь. Я в таких случаях лезу и копаю код вплоть до дергания УРЛ, и что там приходит в заголовках.

    Не, ну что-то определенно не так.

    Вот пример с вашей аватаркой:

    Цитата
    Артур Нойманн пишет:
    Не, с аватаркой вышло, а с фоткой не вышло

    То есть — берем именно каждую русскую букву и реплейсим на ее кодированное представление. (к сожалению, какой-то полноценной замены в виде одной функции не нашел)

    Проверил — у меня работает. Единственное, что если в таких адресах встретится еще что-то необычное (например, немецкий умляут), то опять будет сбой и паттерн а-яА-Я надо будет расширять.

    Источник

    Читайте также:  Настройте порт маппинг порта 554
    Оцените статью