Файлы облачных облаков: загрузка изображений в облачные файлы rackspace с использованием PHP

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

Теперь я хочу загрузить все это изображение в свои облачные файлы rackspace напрямую, используя php-скрипт. Например:

  1. пользователь выбирает файл
  2. пресса представить с некоторой информацией
  3. выбранный файл будет загружен на сервер rackspace и вернет местоположение файла.
  4. то расположение файла вместе с другой информацией будет сохранено в моей базе данных.
  5. то я покажу файл или изображение из этого местоположения.

так что у тебя есть какая-то идея, как я могу это сделать?

я использую:

  • Рамки Codeigniter
  • jQuery как библиотека JavaScript

заранее спасибо за любой ответ.

    Обновление. Хотя метод, описанный ниже, будет по-прежнему работать, невозможно напрямую загружать файлы с помощью токенов (благодаря DesignerGuy для этой информации). Вы можете больше узнать о том, как это сделать. Я должен также упомянуть, что такие сервисы, как transloadit, теперь делают эту вещь тривиально легкой, используя вставки jquery в HTML-формы. Тем не менее метод, который я описываю ниже, по-прежнему работает и, вероятно, дает вам максимальный контроль.

    Вы не можете загружать файлы -directly- в Rackspace Files, не пытаясь внедрить ваши учетные данные Rackspace в форму. Даже если бы это было возможно, это было бы неплохо. (то есть пользователь может добавить массивный контент, используя ваши учетные данные, которые не имеют никакого отношения к вашему приложению). Таким образом, чтобы получить то, что вы хотите, а именно хранить файл в Rackspace и местоположение файла, хранящегося на вашем сервере, вам необходимо изменить рабочий процесс. Это должно быть:

    1. Форма загружает файл на ваш сервер-
    2. – ваш сервер – рассчитал контейнер и имя файла, которое будет использовать файл
    3. – ваш сервер – загружает временный файл в файлы rackspace

    Если вы хотите, чтобы файл был общедоступным для скачивания …

    1. – ваш сервер – позволяет передавать файл через CDN, создавая общедоступный URL-адрес файла, доступ к которому может получить ваш пользователь.
    2. когда ваш сервер создает html, он внедряет URL-адреса CDN, и пользователь волшебным образом получает файлы

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

    1. – ваш сервер – аутентифицируется с помощью rackspace и временно загружает файл
    2. – ваш сервер – служит файлу И HTML как с вашего сервера

    Вы не платите за пропускную способность между вашими серверами и файлами rackspace, если ваш сервер – это также облачный облачный контейнер или обычный Rackspace Managed Server (или, по крайней мере, это то, что мне рассказала служба поддержки). Важный факт при расчете ставок между Amazon и Rackspace.

    Таким образом, вы можете использовать Rackspace Files в качестве массивного жесткого диска для вашего сервера, который дает вам контроль над доступом, или вы можете использовать его в качестве массовой общественной сети распространения … Но в обоих случаях вам может потребоваться изменить порядок ваши шаги, чтобы дать вам то, что вы хотите …

    Вы также можете взглянуть на простой пример использования php для загрузки файла, собранного из HTML-формы, в файлы rackspace .

    от welcome.php:

    function index() { if(!empty($_FILES)){ require('system/libraries/cloudfiles.php'); $upload_dir = 'upload/doc/2'; $tmp_name = $_FILES['upload']['tmp_name']; $name = $_FILES['upload']['name']; move_uploaded_file($tmp_name,"$upload_dir/$name"); $username = 'ABC'; $key = 'X'; $auth = new CF_Authentication($username, $key); $auth->authenticate(); $conn = new CF_Connection($auth); $container = $conn->get_container('documents'); $localfile = "$upload_dir/$name"; $object = $container->create_object($name); $object->load_from_filename($localfile); } $this->load->view('global_header'); $this->load->view('welcome_message'); } 

    from welcome_message.php:

     <form method="post" action="#" enctype="multipart/form-data"s> <input type="file" name="upload"><br/> <input type="submit"> </form> 

    проблемы, с которыми я столкнулся:

    cacert.pem ~ Этот файл должен зайти в ваш веб-каталог и поставляется с api.

    вам может понадобиться fileinfo от pecl, и для этого вам может понадобиться libmagic (если у вас его еще нет).

    вам также нужен пакет php5-curl, а php не сообщает о завихрениях, поэтому вставьте в api и добавьте некоторый вывод, если он не работает.

    Многие из этих ответов стары и смотрят на ответ Орбиты. Я думаю, что с тех пор, должно быть, было много изменений в API. И так как ftrotter уже объяснил о попытке загрузки напрямую, я покажу вам обновленную версию (стиль PHP 5.3) о том, как отправлять файлы из каталога tmp PHP.

    Сначала мы предположим, что вы уже установили API с помощью композитора.

    Сначала вам нужно будет включить их автозагрузчик, а затем добавить пространство имён use .

     require 'vendor/autoload.php'; use OpenCloud\Rackspace as Rackspace; 

    Затем вы просто настраиваете экземпляр клиента

     // first setup the client using your portal username and API key $client = new Rackspace(Rackspace::US_IDENTITY_ENDPOINT, array( 'username' => 'YOUR-USERNAME', 'apiKey' => 'YOUR-API-KEY' )); $region = 'DFW'; // can be ORD or various others and must be set // now get the container $container = $client->objectStoreService('cloudFiles', $region) ->getContainer('YOUR-CONTAINER'); 

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

     if (isset($_FILES)) { $files = array(); foreach ($_FILES as $file) { if (0 === $file['error']) { $files[] = array( 'name' => $file['name'], 'path' => $file['tmp_name'] ); } } if (count($files)) { // upload files to Rackspace Cloud Files container $result = $container->uploadObjects($files); } } 

    Теперь ваши файлы сохраняют свои существующие имена, когда они попадают в контейнер, и вы можете получить общедоступный URL-адрес для своего контейнера прямо из портала Rackspace Cloud.

    Я только что закончил с чем-то похожим. Я думал, что добавлю свои выводы на этот пост.

    Во-первых, поместите пакет cloudfiles в каталог приложений / библиотек: https://github.com/rackspace/php-cloudfiles

    Затем проверьте этот простой класс интеграции. Кроме того, поместите в каталог библиотек. https://bitbucket.org/modomg/codeigniter-rackspace-cloudfiles

    Приветствия, Джефф Уолтерс