tag attribute javascript node.js mime-types connect express

javascript - attribute - title html css



Express: ¿Configuración de tipo de contenido basado en ruta/archivo? (6)

Además, si desea ampliar los mime-tipos que Express (connect) conoce, puede hacer

express.static.mime.define({''text/plain'': [''md'']});

o

connect.static.mime.define({''text/plain'': [''md'']});

PD: el módulo mime ahora se encuentra en mime.lookup

Sé que Express tiene el método res.contentType (), pero ¿cómo configurar automáticamente el tipo de contenido basado en la ruta / archivo (incluido el contenido estático)?


Descarga esta database (u Otro enlace ): mime.types:, luego

var db_mimes=[],mime_ext='''' $.get(''mime.types'',{},function(d){ var lines=d.split(''/n'').filter(function(e){ /* filter which starts with #*/}) lines.forEach(function(line){ mime_ext=line.split('' '') mime_ext[1].split('' '').forEach(function(ext){ db_mimes.push({e:ext,m:mime_ext[0]}) }); //create object for each line . i.e: {mime:'''',extension} }); });

Entonces, si tiene fo ejemplo var fname="myfile.png"

var extension=fname.substr((~-this.lastIndexOf(".") >>> 0) + 2) // get extension from name var minme=db_mimes.filter(function(el){return el.e === extension})[0]


Ejecuta el siguiente cmd:

npm install xmimetype ;

Luego, en su código:

var xm=require("xmimetype"); xm.mimetypeOf("java"); xm.mimetypeOf("./lib/Person.java"); // -> text/x-java-source xm.mimetypeOf("docx"); xm.mimetypeOf("./lib/overview.docx"); // -> application/vnd.openxmlformats-officedocument.wordprocessingml.document

Para más información, consulte el repositorio GIT .

Lo contrario está disponible:

xm.extensionsOf("image/jpeg"); // -> [ ''jpeg'', ''jpg'', ''jpe'' ]


Express usa Connect, Connect usa Mime, e Mime incluye los archivos mime.types (con los tipos de mime predeterminados de Apache) y node.types (con algunos tipos adicionales contribuidos por la comunidad de nodos). Puede simplemente personalizar uno de estos archivos dentro de su copia de mime en node_modules para agregar el tipo de contenido requerido, o Mime también tiene una API que le permite especificar tipos de contenido adicionales o archivos .types para cargar desde su código.

mime.lookup


La documentación de Express muestra que puede hacer esto si pasa el nombre del archivo.

var filename = ''path/to/image.png''; res.contentType(filename); // Content-Type is now "image/png"

[Editar]

Aquí hay un ejemplo que sirve archivos de un directorio relativo llamado static y establece automáticamente el tipo de contenido basado en el archivo servido:

var express = require(''express''); var fs = require(''fs''); var app = express.createServer(); app.get(''/files/:file'', function(req, res) { // Note: should use a stream here, instead of fs.readFile fs.readFile(''./static/'' + req.params.file, function(err, data) { if(err) { res.send("Oops! Couldn''t find that file."); } else { // set the content type based on the file res.contentType(req.params.file); res.send(data); } res.end(); }); }); app.listen(3000);


Connect establecerá automáticamente el tipo de contenido, a menos que usted mismo lo establezca explícitamente. Aquí está el fragmento que lo hace. Utiliza mime.lookup y mime.charsets.lookup

// mime type type = mime.lookup(path); //<SNIP>.... // header fields if (!res.getHeader(''content-type'')) { var charset = mime.charsets.lookup(type); res.setHeader(''Content-Type'', type + (charset ? ''; charset='' + charset : '''')); }

Si esto no funciona para usted, publique su código ya que su código personalizado probablemente esté interfiriendo con el comportamiento predeterminado de alguna manera.