Pregunta

Estoy tratando de subir el archivo a archivo de nube de Rackspace usando el siguiente código:

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

?>

Ahora estoy consiguiendo el error gollowing:

Fatal error: Excepción no detectada 'BadContentTypeException' con el mensaje 'Requerido Content-Type no establece' en C: \ xampp \ htdocs \ Rackspace \ cloudfiles.php: 1645 Seguimiento de la pila: # 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} lanzado en C: \ xampp \ htdocs \ Rackspace \ cloudfiles.php en la línea 1645

Así que cualquiera tiene alguna idea sobre esto? gracias de antemano.

¿Fue útil?

Solución

http://github.com/rackspace/php -cloudfiles / burbuja / maestro / cloudfiles.php en el _guess_content_type () la función que está buscando el tipo de contenido y no es encontrarlo. O bien es necesario agregar más información a su / share / magia o es probable que pueda establecer el tipo de contenido antes de llamar al load_from_filename si usted sabe lo que el tipo de contenido es.

Otros consejos

Esto es una solución si usted tiene ni funciones FileInfo mimo o disponible:

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 usted no tiene habilitada la extensión FileInfo (habilitado por defecto a partir de PHP 5,30). Le sugiero que consulte si mime_content_type () función está disponible.

Parece que si usted tiene ninguno de estos, el tipo de contenido no puede ser detectado. Si ninguno está disponible en este momento, me gustaría obtener FileInfo

He encontrado la solución de Chris Bake útil. Necesitaba poner un "" en frente de cada extensión a continuación.

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

También puede ser que desee considerar el uso de los nuevos oficiales Rackspace PHP SDK . Aquí está el código de ejemplo para crear un objeto .

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