2010-02-20 10 views
3

Je suis en train de télécharger le fichier vers le fichier nuage de Rackspace en utilisant le code suivant:Image Télécharger des fichiers nuage de Rackspace utilisant PHP

Upload.html

<form action="upload.php" enctype="multipart/form-data" method="POST"> 
    File: 
    <input name="upload" type="file" /> 
    <input name="submit" type="submit" value="Upload To Rackspace!" /> 
</form> 

upload.php

<?php 

// include the API 
require('cloudfiles.php'); 

// cloud info 
$username = ""; // username 
$key = ""; // api key 

// Connect to Rackspace 
$auth = new CF_Authentication($username, $key); 
$auth->authenticate(); 
$conn = new CF_Connection($auth); 

// Get the container we want to use 
$container = $conn->get_container('resumetune'); 

// store file information 
$localfile = $_FILES['upload']['tmp_name']; 
$filename = $_FILES['upload']['name']; 

// upload file to Rackspace 
$object = $container->create_object($filename); 
$object->load_from_filename($localfile); 

?> 

Maintenant, je reçois l'erreur suivante:

Erreur fatale: exception non interceptée 'BadContentTypeException 'avec message' Contenu requis-Type non défini 'dans C: \ xampp \ htdocs \ rackspace \ cloudfiles.php: 1645 Trace de pile: # 0 C: \ xampp \ htdocs \ rackspace \ cloudfiles.php (1962): CF_Object-> _guess_content_type ('C: \ xampp \ tmp \ ph ...') # 1 C: \ xampp \ htdocs \ rackspace \ upload.php (24): CF_Object-> load_from_filename ('C: \ xampp \ tmp \ ph .. .) # 2 {main} jeté dans C: \ xampp \ htdocs \ rackspace \ cloudfiles.php sur la ligne 1645

Donc, quelqu'un a une idée à ce sujet? Merci d'avance.

Répondre

5

en regardant http://github.com/rackspace/php-cloudfiles/blob/master/cloudfiles.php à la fonction _guess_content_type() il recherche le type de contenu et il ne le trouve pas. Soit vous avez besoin d'ajouter plus d'informations à votre/share/magic ou vous pouvez probablement définir le type de contenu avant d'appeler le load_from_filename si vous connaissez le type de contenu.

+0

merci, j'ai eu ça .. juste après avoir posté les questions. de toute façon merci –

1

Si l'extension FileInfo n'est pas activée (activée par défaut depuis PHP 5.30). Je vous suggère de vérifier si la fonction mime_content_type() est disponible.

Il semble que si vous n'avez ni l'un ni l'autre, le type de contenu ne peut pas être détecté. Si aucune est disponible en ce moment, j'obtenir FileInfo

5

Voici une solution si vous avez ni mime ou fonctions FileInfo disponibles:

function _guess_content_type($handle) { 

    $ext = ".".end(explode(".", $handle)); 
    switch($ext) 
    { 
     case 'jpg': $this->content_type = "image/jpeg"; break; 
     case 'gif': $this->content_type = "image/gif"; break; 
     case 'png': $this->content_type = "image/png"; break; 
     default: $this->content_type = "image/jpeg"; break; 
    } 

    if ($this->content_type) 
     return; 

    if (function_exists("finfo_open")) { 
     $local_magic = dirname(__FILE__) . "/share/magic"; 
     $finfo = @finfo_open(FILEINFO_MIME, $local_magic); 

     if (!$finfo) 
      $finfo = @finfo_open(FILEINFO_MIME); 

     if ($finfo) { 

      if (is_file((string)$handle)) 
       $ct = @finfo_file($finfo, $handle); 
      else 
       $ct = @finfo_buffer($finfo, $handle); 

      /* PHP 5.3 fileinfo display extra information like 
       charset so we remove everything after the ; since 
       we are not into that stuff */ 
      if ($ct) { 
       $extra_content_type_info = strpos($ct, "; "); 
       if ($extra_content_type_info) 
        $ct = substr($ct, 0, $extra_content_type_info); 
      } 

      if ($ct && $ct != 'application/octet-stream') 
       $this->content_type = $ct; 

      @finfo_close($finfo); 
     } 
    } 

    if (!$this->content_type && (string)is_file($handle) && function_exists("mime_content_type")) { 
     $this->content_type = mime_content_type($handle); 
    } 

    if (!$this->content_type) { 
     throw new BadContentTypeException("Required Content-Type not set"); 
    } 
    return True; 
} 
+0

Bonne réponse, corrigé mon problème! –

+0

Excellente solution – Giri

+0

Parfait. M'a sauvé un mal de tête! – Ignas

0

J'ai trouvé la solution de Chris Bake utile. J'avais besoin de mettre un "." devant chaque extension ci-dessous.

$ext = ".".end(explode(".", $handle)); 
switch($ext) 
{ 
    case '.jpg': $this->content_type = "image/jpeg"; break; 
    case '.gif': $this->content_type = "image/gif"; break; 
    case '.png': $this->content_type = "image/png"; break; 
    default: $this->content_type = "image/jpeg"; break; 
} 
Questions connexes