Question

Je suis en train de télécharger le fichier vers le fichier nuage de Rackspace en utilisant le code suivant:

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 gollowing:

Erreur fatale: Uncaught exception 'de BadContentTypeException' message 'Content-type requis pas défini' dans C: \ xampp \ htdocs \ Rackspace \ cloudfiles.php: 1645 Stack trace: # 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 en ligne 1645

Alors quelqu'un a une idée à ce sujet? merci à l'avance.

Était-ce utile?

La solution

http://github.com/rackspace/php -cloudfiles / blob / maître / cloudfiles.php à la fonction _guess_content_type (), il cherche le type de contenu et il ne le trouver. Soit vous devez ajouter plus d'informations à votre / share / magie ou vous pouvez probablement définir le type de contenu avant d'appeler le load_from_filename si vous savez ce que le type de contenu est.

Autres conseils

Voici une solution si vous avez ni les fonctions de mime ou 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;
}

Si vous n'avez pas l'extension FileInfo 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 avez aucun des deux, le type de contenu ne peut pas être détectée. Si aucune est disponible en ce moment, j'obtenir FileInfo

J'ai trouvé la solution de Chris Bake utile. Je avais besoin de mettre un « » en face de chaque poste 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;
}

Vous pouvez également envisager d'utiliser la nouvelle href="http://docs.rackspace.com/sdks/guide/content/php.html" officielle Rackspace SDK PHP . Voici l'exemple de code pour la création d'un objet.

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