Перейти к содержимому


Хранение файлов в облаке Amazon S3

amazon s3 cloud

Сообщений в теме: 17

#1 Андрей Гуляев

    Активный участник

  • Пользователи
  • PipPipPip
  • 94 сообщений
  • Пол:Мужчина

Отправлено 17 Сентябрь 2012 - 06:51

Есть такой облачный сервис хранения файлов Amazon (S3 storage). Я точно знаю что прикрутить его к Клинтской базе можно, но как? Ещё точно не представляю. Ищу единомышлиников, возможно кто-то уже сделал или думает об этом? Это же будет просто фантастика, Сервер не нагружет и размер хранилища не ограничен.

#2 jazvenko

    Активный участник

  • Пользователи
  • PipPipPip
  • 224 сообщений

Отправлено 21 Сентябрь 2012 - 13:03

Я за

#3 Андрей Гуляев

    Активный участник

  • Пользователи
  • PipPipPip
  • 94 сообщений
  • Пол:Мужчина

Отправлено 21 Сентябрь 2012 - 15:40

Вот уже понял что всё это можно реализовать в файле include/functions1.php но точно знаю что будут какие то проблеммы с бекапом, но если хранить файлы в облаке бекап не нужен, его можно скачать и с amazon s3. Продолжаю пробовать реализовать. Очень греет там мысли что файлы с amazon s3 качаються очень быстро. Плюс мега экономия на хостинге базы, лично я буду экономить 500-700 руб в месяц. т. к. в амазоне хранение 1 Гб стоит примерно 4 руб в месяц. Сейчас плачу 100 руб. за Гб и почти достиг предела хостинга.

#4 Андрей Гуляев

    Активный участник

  • Пользователи
  • PipPipPip
  • 94 сообщений
  • Пол:Мужчина

Отправлено 21 Сентябрь 2012 - 16:48

И вот ещё вопрос кто как думает, как это лучше реализовать? Вариант А) как надстройку не затрагива код в include/functions1.php варинт Б) как надстройку.
И ещё вопрос к разработчикам если изменить код в include/functions1.php относящийся к сохранению и открытию файлов, нужно ли будет менять код который отвечает за аттачи к e-mail рассылкам. Ваши рекомендации? Хочеться сделать так чтобы в дудующих ревизиях эта функция доступна всем, т.к. проблемма хранения больших обёмов файлов рано или поздно возникнет у всех. Вариант иметь свой сервер для многих не приемлем, т.к. не у всех есть colocation в дата центре. А интернет в офисе не достаточно надежен для серьёзных проектов, при условии что предприятие имеет филиальную структуру.

#5 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Сентябрь 2012 - 17:07

Мы не рекомендуем вводить свои изменения в какой-либо из системных файлов, т.к. любые ваши модификации будут стерты при очередном обновлении версии/ревизии. Для разработки своих модулей лучше использовать отдельные файлы. Если же для вашей задачи не обойтись без изменения системных функций, то как вариант можно прислать свои наработки нам, мы их рассмотрим и при одобрении включим в стандартную поставку.

#6 jazvenko

    Активный участник

  • Пользователи
  • PipPipPip
  • 224 сообщений

Отправлено 21 Сентябрь 2012 - 18:27

Сделайте возможность просто подключать свои JS и PHP файлы

#7 Андрей Гуляев

    Активный участник

  • Пользователи
  • PipPipPip
  • 94 сообщений
  • Пол:Мужчина

Отправлено 22 Сентябрь 2012 - 15:37

Я не великий программист, и знаю только basic и с++, с синтаксисом языков PHP и js слабо знаком. Разбираюсь, но медленно.
Как зарегистрироваться на Amazon S3 неплохая статья тут: http://vadim.com.ua/...achalo-rabotyi/
Вы советовали не менять фалов КБ, по этому подумал, что файл config.php идеальная точка соприкосновения настройки «хранение файлов в Amazon S3».
Для взаимодействия с S3 решил использовать php class “S3.php” копируем его в папку «include» исходник и документация тут https://github.com/t...on-s3-php-class

В config.php добавляем строчки ------------------------------------
if (!class_exists('S3')) require_once 'S3.php'; // Вызов класса

// AWS access info Amazon S3 слкдующая строчка должна быть явно не в этом файле, по тому как заставляет авторизоваться каждый раз при обновлении страницы. Здесь в будующем нужно передавать только значение переменных а авторизацию непосредственно при отправке файла.
S3::setAuth("xxxxxxxxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");


// Другие параметры они точно остаются здесь
$bucket = 'xxxxxxxxxx'; // корзина для хранения файлов
$path = ''; // Can be empty '' // путь по умолчанию пример: $path = 'myfiles/' или пустой будет сохранять в корень корзины.
$lifetime = 3600; // Period for which the parameters are valid
$maxFileSize = (1024 * 1024 * 50); // 50 MB
---------------------------------------------------------------------------

Вот всё что я смог придумать… Буду стараться всё подробно описывать, так как думаю важно сделать эту надстройку удобной для всех. Очень жду ваших рекомендаций и поправок. А самое главное я ещё не понял как можно позвать этот класс из «вычислений» в КБ есть мысли? Это вообще возможно? Хотя бы в двух словах принцип как это правильно сделать. Думаю это будет поле типа «файл» нужно перехватывать путь к уже сохранненному файлу и грузить его в S3 и удалять из базы или какие идеи?

Прикрепленные файлы


Сообщение отредактировал Андрей Гуляев: 23 Сентябрь 2012 - 00:37


#8 Андрей Гуляев

    Активный участник

  • Пользователи
  • PipPipPip
  • 94 сообщений
  • Пол:Мужчина

Отправлено 24 Сентябрь 2012 - 03:33

И так вот что получилось. Вариант работает но думаю это ещё только alpha версия
  • В cb/include/config.php добавляем строчки ------------------------------------
// Amazon S3 section
require_once 'amazons3.php';
$config["awsAccessKey"] = "AaaaaaaaaaaaaaaA";
$config["awsSecretKey"] = "IxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxP";

2. Копируем файл cb/include/amazons3.php
Прикрепленный файл  amazons3.php   552байт   130 Количество загрузок:

3. И не забываем скопировать файл класса S3.PHP в cb/include/S3.php

4. Создаем в Клиентской Базе «Поле» тип « Текст» и ставил галочку гиперссылка. Называем к примеру “Cloud”

5. Создаем вычисление или доп действие кому как удобно.
$line['Cloud'] = amazon(get_file_path(1186, $ID, $line['Прикрепить файл']),$line['Прикрепить файл'],'bukket-cbfiles');

Комментарии к вычислению
$line['Cloud'] – текстовое поле в которое пишем ссылку
$line['Прикрепить файл'] –Это поле типа файл о туда воруем всю информацию где лежит файл.
'bukket-cbfiles' – Это уникально имея корзины если её нет создается.

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

Разработчикам: Только осталась маленькая проблемка, если файлов в поле несколько? Каким образом получать их пути? И как мне всё бы допилить для того чтобы выгружались и остальные файлы? Думаю что я достиг предела знаний, это первый мой скрипт за всю жизнь. Я всё же не программист, а звукорежиссер. Помогите плиз кто чем может в доработке скрипта. Всем кому достаточно выгрузки в облако одного файла из ячейки, скрипт могут уже использовать.

Прикрепленные файлы

  • Прикрепленный файл  S3.php   65,79К   150 Количество загрузок:

Сообщение отредактировал Андрей Гуляев: 24 Сентябрь 2012 - 03:37


#9 Андрей Гуляев

    Активный участник

  • Пользователи
  • PipPipPip
  • 94 сообщений
  • Пол:Мужчина

Отправлено 24 Сентябрь 2012 - 04:12

Хотя если добавить это в "доп действия" оно не работает.(((

#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 24 Сентябрь 2012 - 10:00

Просмотр сообщенияjazvenko (21 Сентябрь 2012 - 18:27) писал:

Сделайте возможность просто подключать свои JS и PHP файлы
Такая возможность уже есть: http://clientbase.ru...nager/#external

#11 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 24 Сентябрь 2012 - 10:49

Просмотр сообщенияCbCoder (24 Сентябрь 2012 - 10:00) писал:

Такая возможность уже есть: http://clientbase.ru...nager/#external
Т.е. если указать файл как внешний в коде появится строка его подключающая?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#12 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 24 Сентябрь 2012 - 10:54

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

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#13 Analitic

    Активный участник

  • Пользователи
  • PipPipPip
  • 700 сообщений
  • Пол:Мужчина

Отправлено 24 Сентябрь 2012 - 10:58

Просмотр сообщенияandibrag (24 Сентябрь 2012 - 10:49) писал:

Т.е. если указать файл как внешний в коде появится строка его подключающая?
На текущий момент вам придется включать его в файл config.php. В ближашем будущем, автоматические вычисления, срабатывающие каждый раз можно будет добавить в "Системных вычислениях".

#14 Андрей Гуляев

    Активный участник

  • Пользователи
  • PipPipPip
  • 94 сообщений
  • Пол:Мужчина

Отправлено 24 Сентябрь 2012 - 11:12

Если в поле файл сидит несколько файлов, как получить их пути, а не только путь одного файла? Первый можно получить так get_file_path(1186, $ID, $line['Прикрепить файл'] А остальные?

#15 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 24 Сентябрь 2012 - 11:23

Цитата

Если в поле файл сидит несколько файлов, как получить их пути, а не только путь одного файла? Первый можно получить так get_file_path(1186, $ID, $line['Прикрепить файл'] А остальные?
Первый вы так тоже не получите, только если он один. Если файлов несколько, то они в поле разделены переводом строки ("\r\n"). Соответственно, разбираете их, и получаете пути по отдельности.

$files = explode("\r\n", $line['Прикрепить файл']); // разбиваем список файлов в массив
foreach ($files as $file) // цикл по полученному массиву
{
  $path = get_file_path(1186, $ID, $file); // получаем путь к текущему файлу
  // ... здесь ваши операции с текущим файлом/путем
}


#16 Analitic

    Активный участник

  • Пользователи
  • PipPipPip
  • 700 сообщений
  • Пол:Мужчина

Отправлено 24 Сентябрь 2012 - 12:08

По желанию сторонних разработчиков был добавлена возможность переопределения стандартных функций работы с файлами. А также возможность подключать свои файлы. Итак по порядку:

1. Создаете файл include/functions_custom.php. В нем вы можете указывать ваши функции для работы с программой. Данный файл инклудиться до файла functions1.php.
Для того чтобы данный файл являлся частью конфигурации добавляем его в "Cписок внешних файлов". Там же появляется возможность редактировать его.
2. В данном файле вы можете переопределить функции работы с файлами, такие как: get_file_path и т.п.
Это позволит подменить механизм опеределния пути к файлам в программе.
Внимание! Программа подразумевает работу только с локальными файлами, и содержит блоки подобные этому:
$new_name=get_file_path($f_info['field_id'], $line_id, $f_info['name']);
create_data_file_dirs($f_info['field_id'], $line_id, $f_info['name']);
copy($f_info['temp_name'],$new_name);
В будущих версиях данное ограничение будет убрано, работа с файлами будет производиться только через функции, которые можно будет переопределить.
3. Для того чтобы также полноценно поддерживать загрузки файлов из программы в файле functions_custom.php, вам необходимо написать функцию cust_open_file(). У функции нет параметров. Все параметры получаете самостоятельно с помощью $_REQUEST.

Итак на текущий момент, для того чтобы сделать полноценную интеграцию с амазон диском необходимо:
1. Хостинг vps. Монтируете диск амазона к себе на виртуальную машину используя s3fs. Таким образом скрипты, которые работали с файлами на диске, не заметят подмены.
2. Если необходимо меняте функцию get_file_path
3. Пишете свою cust_open_file(). Которая будет делать header("Location: ..."); На S3 амазона.

#17 Андрей Гуляев

    Активный участник

  • Пользователи
  • PipPipPip
  • 94 сообщений
  • Пол:Мужчина

Отправлено 24 Сентябрь 2012 - 13:35

Просмотр сообщенияCbCoder (24 Сентябрь 2012 - 11:23) писал:

Первый вы так тоже не получите, только если он один. Если файлов несколько, то они в поле разделены переводом строки ("\r\n"). Соответственно, разбираете их, и получаете пути по отдельности.

$files = explode("\r\n", $line['Прикрепить файл']); // разбиваем список файлов в массив
foreach ($files as $file) // цикл по полученному массиву
{
  $path = get_file_path(1186, $ID, $file); // получаем путь к текущему файлу
  // ... здесь ваши операции с текущим файлом/путем
}
ещё момент помогите плиз, мне вместе с путем в цикле нужно получать реальное имя файла. Из поля ['Прикрепить файл'] что бы в функции отправки в Амазон подменять название файла и выгружать его с реальным именем. Как организовать такой двойной цыкл?

#18 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 24 Сентябрь 2012 - 13:45

Переменная $file в примере как раз и содержит имя отдельного файла.





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных