2012-02-07 14 views
5

De acuerdo con docs, contentType es opcional y intentará determinar el tipo correcto de mime basado en la extensión de archivo. Sin embargo, nunca pareció adivinar el tipo MIME y tenga por defecto application/octet-streamLos archivos de Amazon S3 cargados con AWS SDK para PHP siempre son "application/octet-stream"?

Aquí está mi código:

$s3 = new AmazonS3(); 

$opt = array( 'fileUpload' => $_FILES['file']['tmp_name'], 
       'storage'  => Amazons3::STORAGE_REDUCED); 

$r = $s3->create_object('mybucket', $_FILES['file']['name'], $opt); 

Aquí hay una captura de pantalla de mi consola AWS:

enter image description here

¿Cómo configura automáticamente el tipo de contenido adecuado sin configurar la opción contentType, o realmente tiene que configurarlo manualmente?

Información adicional: Si descargo un archivo de la consola (que originalmente cargué a través de SDK) y lo cargo de nuevo con la consola, se configura el tipo de contenido adecuado (por ejemplo: image/gif para archivos GIF en lugar de la aplicación/octet-stream)

Respuesta

6

Intenta agregar la clave 'contentType' a tu matriz de opciones al crear el objeto y utiliza 'body' en lugar de 'fileUpload'. Por ejemplo:

$s3->create_object('MY_BUCKET', 'xml_file.xml', array(
             'body' => '<xml>Valid xml content</xml>', 
             'contentType' => 'text/xml' 
            )); 

Crea con éxito el archivo con el tipo de contenido text/xml. Como sé, Content-Type no se establece automáticamente al cargar a través de SDK. Pero, ¿cuál es el problema para derminar el tipo de mimo desde PHP y establecer la propiedad 'contentType'?

+1

Sí, siempre puedo configurar contentType, pero la documentación dice que se hace automáticamente: * Si un archivo se está cargando a través de fileUpload como una ruta del sistema de archivos, intentará determinar el tipo de mime correcto basado en la extensión de archivo. * pero eso no está sucediendo, por lo que probablemente haya un error. – IMB

+1

'ContentType' con mayúscula' C'. De lo contrario, no funciona para mí. –

+0

La respuesta anterior funcionó para mí hasta que me mudé al nuevo SDK. No puedo conseguir que funcione más: http://stackoverflow.com/questions/21892352/specify-content-type-in-aws-phps-upload-function –

1

Acabo de encontrarme en esta situación en la que, al cargar algunos archivos, Content-Type no se detectó automáticamente. No pude entender cuál era la causa hasta que revisé el código viendo la ejecución del SDK. Descubrí que la función CFMimeTypes :: get_mimetype(), que se usa para determinar automáticamente el tipo de contenido, usa una comparación sensible a mayúsculas y minúsculas para determinar el tipo MIME. Debido a esto, solo las extensiones en minúsculas coincidirán. Si su extensión de archivo es mayúscula o mixta, no coincidirá con el tipo MIME 'application/octet-stream'.

Para el montaje de cambiar la línea:

'fileUpload' => $_FILES['file']['tmp_name'] 

a

'fileUpload' => strtolower($_FILES['file']['tmp_name']) 

Estoy utilizando el SDK v 1.5.8.2, pero no parece haber ningún cambio en esta detección en el 1.5.9 o 1.5.10 lanzamientos que han salido ambos la semana pasada. Considero que esto es un error y lo presentaré como tal.

+0

La detección automática de tipo MIME se ha corregido en la versión 1.5 del SDK .15. – Brady

Cuestiones relacionadas