fichiers cloud Rackspace: Image Télécharger des fichiers nuage de Rackspace en utilisant PHP

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

Question

Je suis en train de faire un projet dans lequel l'utilisateur peut télécharger des images comme l'image ou de l'image profil pour leur image galeria. en ce moment le téléchargement de toutes les images sur mon serveur.

Maintenant, je veux télécharger cette image tout à mes fichiers nuage Rackspace directement à l'aide script php. Par exemple:

  1. utilisateur de sélectionner un fichier
  2. appuyez sur Envoy quelques informations
  3. le fichier sélectionné sera téléchargé sur le serveur Rackspace et retourner l'emplacement du fichier.
  4. puis sera sauvegardé l'emplacement du fichier ainsi que d'autres informations contenues dans ma base de données.
  5. alors je vais montrer le fichier ou l'image de cet endroit.

u n'ont une idée, exactement comment je peux le faire?

J'utilise:

  • Cadre Codeigniter
  • jQuery javascript bibliothèque

Merci d'avance pour toute réponse.

Était-ce utile?

La solution

Mise à jour: Bien que la méthode que je décris ci-dessous fonctionne toujours, il est impossible de télécharger des fichiers directement à l'aide de jetons (grâce à DesignerGuy pour cette info ). Vous pouvez en savoir plus sur la façon de faire . Je dois aussi mentionner que les services comme transloadit faire maintenant ce genre de chose facile trivialement en utilisant des inserts jquery dans les formulaires HTML. Toujours la méthode que je décris ci-dessous fonctionne toujours et vous donne probablement le plus de contrôle.

Vous ne pouvez pas charger des fichiers -directly- à Rackspace fichiers, sans essayer quelque chose comme l'intégration de vos informations d'identification Rackspace dans le formulaire. Même si cela était possible, il ne serait pas une bonne idée. (À savoir l'utilisateur peut ajouter du contenu massif en utilisant vos informations d'identification qui ont rien à voir avec votre application). Donc, pour obtenir ce que vous voulez, qui est essentiellement d'avoir le fichier stocké à Rackspace, et l'emplacement du fichier stocké dans votre serveur, vous devez modifier votre flux de travail. Il doit être:

  1. le téléchargement de fichier formulaire à -Votre serveur -
  2. -Votre server- calculé le conteneur et le nom que le fichier utilisera
  3. -Votre server- télécharge le fichier temporaire pour Rackspace fichiers

Si vous voulez que le fichier à télécharger ... publiquement

  1. -Votre server- permet au fichier d'être servi par le CDN, ce qui rend une URL publique pour le fichier que votre utilisateur peut accéder.
  2. lorsque votre serveur crée HTML, il intègre les urls CDN et l'utilisateur obtient comme par magie les fichiers

Si vous voulez que le fichier soit uniquement téléchargeable par les utilisateurs -certain- ....

  1. -Votre server- authentifie avec Rackspace et télécharge le fichier temporairement
  2. -Votre server- sert le fichier et le code HTML à la fois de votre serveur

Vous ne payez pas pour la bande passante entre -Vos fichiers serveur et Rackspace, si -Votre server- est aussi une instance de nuage de Rackspace ou un serveur géré Rackspace régulier (ou tout au moins qui est ce que le soutien client m'a dit). Un fait important lors du calcul des taux entre Amazon et Rackspace.

Vous pouvez utiliser Rackspace fichiers comme un disque dur énorme pour votre serveur, ce qui vous permet de contrôler l'accès, ou vous pouvez l'utiliser comme un vaste réseau de distribution publique ... Mais dans les deux cas, vous devrez peut-être modifier l'ordre de vos étapes pour vous donner ce que vous voulez ...

Vous pourriez aussi chercher à un exemple simple d'utilisation php pour télécharger un fichier à partir d'un formulaire recueilli HTML pour Rackspace fichiers .

Autres conseils

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>

problèmes que je rencontre:

cacert.pem ~ Ce fichier doit aller dans votre répertoire web et est livré avec l'api.

vous devrez peut-être fileinfo de PECL, et pour cela, vous devrez peut-être libmagic (si vous ne l'avez pas déjà).

vous avez aussi besoin du paquet php5-curl et php ne signale pas d'erreurs papillotes, donc creuser dans les api et d'ajouter une sortie si elle ne fonctionne pas.

Beaucoup de ces réponses sont vieux et regarder la réponse Orbit Je pense qu'il doit y avoir eu beaucoup de changements à l'API depuis. Et depuis ftrotter déjà expliqué à essayer de télécharger directement, je vais vous montrer une version mise à jour (style PHP 5.3) de la façon envoyer les fichiers à partir du répertoire tmp PHP.

D'abord, nous supposerons que vous avez déjà installé l'API à l'aide compositeur.

D'abord, vous aurez besoin d'inclure leur chargeur automatique, puis ajoutez l'espace de noms use.

require 'vendor/autoload.php';

use OpenCloud\Rackspace as Rackspace;

Ensuite, il vous suffit de configurer l'instance 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');

Maintenant que vous avez votre conteneur vous pouvez simplement configurer votre tableau de fichiers et de les télécharger. Voici un moyen rapide et sale:

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

Maintenant, vous vos fichiers conserveront leurs noms existants quand ils se retrouvent dans le récipient, et vous pouvez obtenir le chemin d'URL publique de votre conteneur directement depuis le portail Nuage Rackspace.

Je viens de faire avec quelque chose de similaire. Je pensais ajouter mes conclusions à ce poste.

Tout d'abord, placez le paquet CloudFiles dans votre application / répertoire des bibliothèques: https://github.com/rackspace/php-cloudfiles

Vérifiez ensuite cette classe simple d'intégration. En outre, placer dans le répertoire des bibliothèques. https://bitbucket.org/modomg/codeigniter-rackspace-cloudfiles

Cordialement, Jeff Walters

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top