Я делаю проект, где пользователь может загружать изображения, такие как изображение профиля или изображение для своего изображения. прямо сейчас он загружает все изображения на мой сервер.
Теперь я хочу загрузить все это изображение в свои облачные файлы rackspace напрямую, используя php-скрипт. Например:
так что у тебя есть какая-то идея, как я могу это сделать?
я использую:
заранее спасибо за любой ответ.
Обновление. Хотя метод, описанный ниже, будет по-прежнему работать, невозможно напрямую загружать файлы с помощью токенов (благодаря DesignerGuy для этой информации). Вы можете больше узнать о том, как это сделать. Я должен также упомянуть, что такие сервисы, как transloadit, теперь делают эту вещь тривиально легкой, используя вставки jquery в HTML-формы. Тем не менее метод, который я описываю ниже, по-прежнему работает и, вероятно, дает вам максимальный контроль.
Вы не можете загружать файлы -directly- в Rackspace Files, не пытаясь внедрить ваши учетные данные Rackspace в форму. Даже если бы это было возможно, это было бы неплохо. (то есть пользователь может добавить массивный контент, используя ваши учетные данные, которые не имеют никакого отношения к вашему приложению). Таким образом, чтобы получить то, что вы хотите, а именно хранить файл в Rackspace и местоположение файла, хранящегося на вашем сервере, вам необходимо изменить рабочий процесс. Это должно быть:
Если вы хотите, чтобы файл был общедоступным для скачивания …
Если вы хотите, чтобы файл был загружен только пользователями -которые …
Вы не платите за пропускную способность между вашими серверами и файлами 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
Приветствия, Джефф Уолтерс