Domanda

sto facendo un progetto dove l'utente può caricare le immagini immagini di profilo o l'immagine come per la loro gallary immagine. adesso il suo caricamento di tutte le immagini al mio assistente.

Ora, voglio caricare tutto questa immagine ai miei file su cloud Rackspace direttamente utilizzando script php. Ad esempio:

  1. all'utente di selezionare un file
  2. premere Invia ad alcune informazioni
  3. il file selezionato verrà caricato sul server Rackspace e tornare la posizione del file.
  4. quindi la posizione del file insieme ad altre informazioni verranno salvate nel mio database.
  5. allora io farò vedere il file o l'immagine da quella posizione.

in modo do u hanno alcuna idea, esattamente come posso fare questo?

sto usando:

  • quadro Codeigniter
  • jQuery come libreria javascript

Grazie in anticipo per qualsiasi risposta.

È stato utile?

Soluzione

Aggiornamento: Anche se il metodo che ho descritto qui di seguito continuerà a funzionare, non è possibile caricare i file direttamente utilizzando gettoni (grazie a DesignerGuy per queste informazioni ). Si può leggere di più su come farlo qui . Vorrei anche ricordare che i servizi come transloadit ora fare questo genere di cose banalmente facile utilizzando inserti jquery in moduli HTML. Ancora il metodo che ho descritto qui di seguito funziona ancora e ti dà il massimo controllo, probabilmente.

Non è possibile caricare i file -directly- a Rackspace file, senza cercare qualcosa come incorporare le credenziali di Rackspace nel modulo. Anche se ciò fosse possibile, non sarebbe una buona idea. (Vale a dire l'utente può aggiungere il contenuto di massa utilizzando le credenziali che non hanno nulla a che fare con l'applicazione). Quindi, per ottenere quello che vuoi, che è essenzialmente di avere il file memorizzato a Rackspace, e la posizione del file memorizzato sul server è necessario modificare il flusso di lavoro. Ha bisogno di essere:

  1. arrivi sotto forma di file di -Il vostro assistente -
  2. -il vostro server-calcolato il contenitore e il nome che il file utilizzerà
  3. -La tua su server carica il file temporaneo per Rackspace file

Se si desidera che il file sia pubblicamente scaricabile ...

  1. -La tua su server permette il file per essere servito attraverso il CDN, facendo un URL pubblico per il file che l'utente può accedere.
  2. quando il server crea html che incorpora gli URL CDN e l'utente ottiene magicamente i file

Se si desidera che il file essere solo scaricabile dagli utenti -certain- ....

  1. -La tua su server autentica con Rackspace e scarica il file temporaneo
  2. -il vostro server-serve il file e il codice HTML sia dal server

Non si paga per la larghezza di banda tra -Le file server e Rackspace, se -La tua su server è anche un esempio di cloud di Rackspace o un normale Rackspace Managed Server (o almeno questo è ciò che l'assistenza clienti mi ha detto). Un fatto importante per il calcolo dei tassi tra Amazon e Rackspace.

Quindi, è possibile utilizzare i file Rackspace come un enorme disco rigido per il server, che permette di controllare l'accesso, oppure è possibile utilizzarlo come una massiccia rete di distribuzione pubblica ... Ma in entrambi i casi potrebbe essere necessario cambiare l'ordine dei vostri passi per darvi quello che volete ...

Si potrebbe anche guardare un semplice esempio di utilizzo di php per caricare un file raccolti da un modulo HTML per Rackspace file .

Altri suggerimenti

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

da welcome_message.php:

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

problemi che ho incontrato:

cacert.pem ~ Questo file ha bisogno di andare nella vostra directory web e viene fornito con l'API.

potrebbe essere necessario fileinfo da PECL, e per questo potrebbe essere necessario libmagic (se non lo avete già fatto).

è necessario anche il pacchetto php5-curl, e php non segnala gli errori ricciolo, in modo da scavare nella api e aggiungere un po 'di uscita se non funziona.

Un sacco di queste risposte sono vecchi e guardando la risposta di Orbit Credo che ci deve essere stato molti cambiamenti alle API da allora. E poiché ftrotter già spiegato di cercare di caricare direttamente, vi mostrerò una versione aggiornata (PHP 5.3 style) di come inviare i file dalla directory tmp PHP.

In primo luogo si suppone si è già installato l'API utilizzando compositore.

In primo luogo è necessario includere il loro caricatore automatico e quindi aggiungere il namespace use.

require 'vendor/autoload.php';

use OpenCloud\Rackspace as Rackspace;

Quindi è sufficiente impostare l'istanza del client

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

Ora che avete il vostro contenitore si può semplicemente installare il vostro array di file e di caricarli. Ecco un modo veloce e sporco:

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

Ora i file non mancherà di tenere i loro nomi esistenti quando finiscono nel contenitore, e si può ottenere il sentiero URL pubblico per il vostro contenitore proprio dal portale Rackspace Cloud.

Ho appena ricevuto fatto con qualcosa di simile. Ho pensato di aggiungere le mie scoperte a questo post.

In primo luogo, inserire il pacchetto cloudfiles nell'applicazione / librerie directory: https://github.com/rackspace/php-cloudfiles

Quindi controllare questo semplice classe di integrazione. Inoltre, posto nella directory librerie. https://bitbucket.org/modomg/codeigniter-rackspace-cloudfiles

Saluti, Jeff Walters

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top