2011-08-18 34 views

Trả lời

6

Connect sẽ tự động đặt loại nội dung, trừ khi bạn đặt chính xác nó. Đây là đoạn trích. Nó sử dụng mime.lookup và 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 : '')); 
} 

Nếu điều này không làm việc cho bạn, gửi mã của bạn như mã tùy chỉnh của bạn có khả năng ảnh hưởng tới hành vi mặc định bằng cách nào đó.

+0

'mime.lookup()' hiện được đổi tên thành 'mime.getType()'. – Pei

8

Express documentation cho biết rằng nó có thể thực hiện việc này nếu bạn chuyển tên tệp.

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

[Chỉnh sửa]

Dưới đây là một ví dụ mà phục vụ tập tin từ một thư mục tương đối gọi là static và tự động cài đặt các loại nội dung dựa trên các tập tin phục vụ:

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

Cảm ơn, nhưng đó là những gì tôi muốn tránh ... chỉ muốn nó được tự động dựa trên đường dẫn hoặc tên tập tin. – mahemoff

+0

Tôi không chắc mình hiểu. Bạn có thể đăng một ví dụ nhỏ không? –

+0

Tôi đã cập nhật câu trả lời của mình bằng một ví dụ. Tôi vẫn còn hiểu lầm những gì bạn đang tìm kiếm? –

2

Express sử dụng Connect, Connect sử dụng Mime, và Mime bao gồm các tập tin mime.types (với kiểu MIME mặc định từ Apache) và node.types (với một số loại tiếp tục đóng góp của cộng đồng nút) . Bạn chỉ có thể tùy chỉnh một trong các tệp này trong bản sao của mime trong node_modules để thêm loại nội dung bắt buộc của bạn hoặc Mime cũng có API cho phép bạn chỉ định các loại nội dung bổ sung hoặc tệp .types để tải từ mã của bạn.

https://github.com/broofa/node-mime

+0

Thêm định nghĩa mime thông qua 'require (" mime "). Define (...)' không hoạt động. Nó có thể là bởi vì các gói nhanh là mô-đun mime của riêng mình? Làm cách nào để truy cập vào mô-đun mime đi kèm? – panzi

24

Ngoài ra, nếu bạn muốn mở rộng mime-loại mà thể hiện (kết nối) biết về, bạn có thể làm

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

hoặc

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

PS: mime mô-đun hiện có tại số https://github.com/broofa/node-mime

0

Tải xuống trang này database (hoặc Another link): mime.types:, sau đó

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


}); 

Sau đó, nếu bạn có fo dụ 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] 

+0

bị hủy do liên kết bị hỏng –

+0

Tôi thay đổi liên kết, nhấp lại và xóa phiếu bầu: https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types –

+0

cảm ơn Abdennour –

0

Chạy cmd sau:

npm install xmimetype ; 

Sau đó, trong mã của bạn:

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 

Để biết thêm thông tin, hãy kiểm tra GIT repository.


Điều ngược lại đã có sẵn:

xm.extensionsOf("image/jpeg"); 
// -> [ 'jpeg', 'jpg', 'jpe' ] 
Các vấn đề liên quan