Облачные файлы Rackspace: Загрузка изображения в rackspace облачные файлы с помощью PHP

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

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

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

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

я использую:

  • Платформа Codeigniter
  • jQuery как библиотека JavaScript

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

11
задан M.M.H.Masud 6 February 2010 в 20:06
поделиться

2 ответа

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

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

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

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

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

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

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

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

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

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

19
ответ дан 3 December 2019 в 05:34
поделиться

from 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>

problems I encountered:

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

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

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

1
ответ дан 3 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: