Rackspace Cloud File: carga de imágenes en archivos de espacio de rack en la nube usando PHP

StackOverflow https://stackoverflow.com/questions/2214540

Pregunta

Estoy haciendo un proyecto donde el usuario puede subir imágenes imagen del perfil o imagen como por su gallary imagen. en este momento la posibilidad de subir todas las imágenes en el servidor.

Ahora, quiero cargar todos esta imagen para mis archivos Rackspace Cloud directamente a través de script PHP. Por ejemplo:

  1. usuario seleccionar un archivo
  2. pulse enviar alguna información
  3. El archivo seleccionado se carga en el servidor de espacio de rack y devolver la ubicación del archivo.
  4. a continuación, la ubicación del archivo junto con otra información se guardará en mi base de datos.
  5. entonces voy a mostrar el archivo o la imagen de ese lugar.

Lo mismo ocurre con u tiene alguna idea, exactamente cómo puedo hacer esto?

Estoy utilizando:

  • marco CodeIgniter
  • jQuery como librería javascript

Gracias de antemano por cualquier respuesta.

¿Fue útil?

Solución

Actualización: Aunque el método que describo a continuación seguirá funcionando, no es posible subir archivos directamente a través de fichas (gracias a DesignerGuy de esa información ). Puede leer más acerca de cómo hacer que aquí . También debería mencionar que los servicios como transloadit ahora hacer este tipo de cosas trivialmente fácil usando jquery insertos en formularios HTML. Siendo el método que describo a continuación todavía funciona y, probablemente, le da un mayor control.

No se pueden cargar archivos -directly- a Rackspace archivos, sin intentar algo así como la incorporación de sus credenciales de Rackspace en el formulario. Incluso si esto fuera posible, no sería una buena idea. (Es decir, el usuario puede agregar contenido masiva con sus credenciales que no tienen nada que ver con su aplicación). Así que para conseguir lo que quiere, que es esencialmente de tener el archivo almacenado en Rackspace, y la ubicación del archivo almacenado en el servidor tiene que modificar su flujo de trabajo. Tiene que ser:

  1. Formulario de carga de archivos a servidores -Su -
  2. -su en servidor calcula el envase y el nombre de archivo que el archivo utilizará
  3. -su en servidor carga el archivo temporal a Rackspace archivos

Si desea que el archivo sea públicamente descargable ...

  1. -su en servidor permite el archivo para ser servido a través de la CDN, haciendo una dirección URL pública para el archivo que el usuario puede tener acceso.
  2. cuando se crea el servidor HTML que incrusta las direcciones URL de CDN y el usuario recibe mágicamente los archivos

Si desea que el archivo descargable ser sólo por -certain- usuarios ....

  1. -su en servidor autentica con Rackspace y descarga el archivo temporal
  2. -su en servidor sirve el archivo y el código HTML tanto desde el servidor

Usted no paga por el ancho de banda entre -sus archivos en servidor y Rackspace, si -su en servidor es también una instancia de la nube Rackspace o un servidor regular de Rackspace Managed (o al menos eso es lo que la atención al cliente me ha dicho). Un hecho importante en el cálculo de las tasas entre Amazon y Rackspace.

Así que usted puede utilizar Rackspace archivos como un disco duro enorme para su servidor, lo que le da control sobre el acceso, o se puede utilizar como una red de distribución pública masiva ... Pero en ambos casos puede que tenga que cambiar el orden de los pasos para darle lo que quiere ...

También puede buscar en un ejemplo sencillo de utilizar PHP para cargar un archivo obtenida de un formulario HTML para Rackspace archivos .

Otros consejos

de 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');
    }

de welcome_message.php:

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

Los problemas que tuve:

cacert.pem ~ Este archivo tiene que ir en su directorio web y viene con la API.

es posible que necesite fileinfo de pecl, y por ello puede que tenga libmagic (si no lo tienes ya).

también necesita el paquete php5-rizo, y php no informa de los errores de enrollamiento, por lo que cavar en el API y añadir un poco de la salida si no está trabajando.

Muchas de estas respuestas son viejos y mirando a la respuesta de Orbit Creo que debe haber habido muchos cambios en la API desde entonces. Y puesto que ftrotter ya se ha explicado en tratar de subir directamente, te mostraré una versión actualizada (estilo PHP 5.3) de cómo enviar los archivos desde el directorio de PHP tmp.

En primer lugar vamos a asumir que ya ha instalado el API utilizando compositor.

En primer lugar, tendrá que incluir su cargador automático y luego agregar el espacio de nombres use.

require 'vendor/autoload.php';

use OpenCloud\Rackspace as Rackspace;

A continuación, sólo tiene que configurar la instancia de cliente

// 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');

Ahora que tiene su contenedor puede simplemente configurar su array de archivos y subirlos. Aquí está una manera rápida y sucia:

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);
    }
}

Ahora que sus archivos mantendrán sus nombres existentes cuando terminan en el contenedor, y se puede obtener la ruta URL pública para su contenedor directamente desde el portal de Rackspace Cloud.

Me acaban de hacer con algo similar. Pensé que me gustaría añadir mis hallazgos a este mensaje.

En primer lugar, coloque el paquete en su CloudFiles application / libraries directorio: https://github.com/rackspace/php-cloudfiles

A continuación, echa un vistazo a esta clase de integración sencilla. También, coloque en el directorio de bibliotecas. https://bitbucket.org/modomg/codeigniter-rackspace-cloudfiles

Cheers, Jeff Walters

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top