2014-07-09 19 views
6

Dường như tất cả các thư viện kiểu MIME phổ biến cho node.js chỉ sử dụng phần mở rộng tên tệp chứ không phải xem trước tệp để xác định loại MIME.Sử dụng nội dung tệp để xác định loại MIME với nút JS

Có cách nào tốt để sử dụng nút để nhảy vào tệp và xác định thông minh loại MIME của tệp trong trường hợp không có phần mở rộng?

Trả lời

7

Điều đó thực sự cảm thấy như một điều đáng tiếc, các mô-đun MIME phổ biến nhất chỉ là ánh xạ phần mở rộng cho loại đó.

Sau khi tìm kiếm sâu hơn, tôi tìm thấy mô-đun được gọi là mmmagic, có vẻ như bạn đang thực hiện chính xác những gì bạn muốn.

Hãy nhận biết, mà làm việc với MIME tôi bị bỏ lại với một hương vị, mà MIME phát hiện về nguyên tắc không hoàn toàn đáng tin cậy, và có một cơ hội hiếm hoi của nhận diện sai.

Ví dụ về sử dụng (lấy từ their chỗ):

var mmm = require('mmmagic'), 
     Magic = mmm.Magic; 

    var magic = new Magic(mmm.MAGIC_MIME_TYPE); 
    magic.detectFile('node_modules/mmmagic/build/Release/magic.node', function(err, result) { 
     if (err) throw err; 
     console.log(result); 
     // output on Windows with 32-bit node: 
     // application/x-dosexec 
    }); 
3

Kể từ MIME không ở tất cả các sai khiến bất cứ điều gì về định dạng nội dung tập tin, bạn chỉ có thể sử dụng công nghệ tự động đoán những gì đang xảy ra trong một tập tin:

  1. Một số định dạng nhị phân có tên gọi là số ma thuật, nhưng có thể sai hoặc mơ hồ. See this wikipedia article để biết thêm thông tin.

  2. Nhiều định dạng tệp văn bản chứa cấu trúc ngữ pháp mà bạn có thể sử dụng cho thử nghiệm đối sánh mẫu đơn giản. Ví dụ. xml, csv hoặc json. Tuy nhiên, một số định dạng (ví dụ: HTML), có định nghĩa cú pháp khá "tiến hóa" làm cho nó trở nên mơ hồ và do đó khó khớp mẫu.

Để minh họa rõ hơn về vấn đề nhập nhằng, đây là một ví dụ: Các trình duyệt đã phát triển một sự khoan dung rất rất cao, và chấp nhận bất cứ điều gì từ xa giống HTML do đó một HTML (hoặc thậm chí XHTML) định dạng tập tin là khó có thể xác định . Chưa kể thực tế là các tệp HTML thực sự có thể là các ngôn ngữ mẫu không phải là HTML (chẳng hạn như jade, handlebars, angular mẫu v.v ...). Đây chỉ là một trong nhiều ví dụ mà mọi thứ trở nên rất mơ hồ.

Các vấn đề liên quan