2012-05-03 14 views
17

प्राप्त करें मुझे सामग्री प्रकार सेट करने के लिए node.js की मदद से फ़ाइल का फ़ाइल प्रकार प्राप्त करने की आवश्यकता है। मुझे पता है कि मैं आसानी से फ़ाइल एक्सटेंशन की जांच कर सकता हूं लेकिन मुझे एक्सटेंशन के बिना फाइलें भी मिली हैं जिनके पास सामग्री प्रकार image/png, text/html एएसओ होना चाहिए।Node.js - फ़ाइल सिस्टम फ़ाइल प्रकार

यह मेरा कोड है (मैं जानता हूँ कि यह बहुत मतलब नहीं है लेकिन यह है कि आधार की आवश्यकता है):

var http = require("http"), 
    fs = require("fs"); 
http.createServer(function(req, res) { 
    var data = ""; 
    try { 
     /* 
     * Do not use this code! 
     * It's not async and it has a security issue. 
     * The code style is also bad. 
     */ 
     data = fs.readFileSync("/home/path/to/folder" + req.url); 
     var type = "???"; // how to get the file type?? 
     res.writeHead(200, {"Content-Type": type}); 
    } catch(e) { 
     data = "404 Not Found"; 
     res.writeHead(404, {"Content-Type": "text/plain"}); 
    } 
    res.write(data); 
    res.end(); 
}).listen(7000); 

मैं API में उस के लिए एक समारोह नहीं मिला है तो मैं खुशी होगी अगर कोई मुझे बता सकता है कि यह कैसे करें।

+6

'readFileSync' प्रत्येक अनुरोध पर? एक अच्छा विचार की तरह नहीं लगता है ... – ThiefMaster

+3

@ थिफमास्टर जैसा कि उसने कहा था कि यह केवल डमी कोड है (कम से कम यही मुझे लगता है कि "मुझे पता है कि यह ज्यादा नहीं समझता है [समझदारी] लेकिन यह आधार मुझे चाहिए" माना जाता है का मतलब)। –

उत्तर

14

mmmagic module पर एक नज़र डालें। यह एक libmagic बाध्यकारी है और आप वास्तव में क्या करना चाहते हैं ऐसा लगता है।

+3

मान लीजिए 'fs.stat' क्या' stat' करता है: आप वहां से कितनी जानकारी प्राप्त करेंगे, उसे MIME प्रकार का निर्धारण करने में मदद मिलेगी फ़ाइल? – ThiefMaster

+1

मुझे वास्तव में पता नहीं है, मुझे लगता है कि यह आपको कुछ उपयोगी बताएगा: पी – Raynos

+8

@ रेनोस: जैसा कि आपको कोई जानकारी नहीं है, आपने टिप्पणी क्यों की? यह अभी तक का सबसे अच्छा जवाब है। – Ashe

10

आपको कमांड लाइन टूल file (लिनक्स) पर एक नज़र रखना चाहिए। यह फ़ाइल के पहले बाइट्स के आधार पर फ़ाइल प्रकार का अनुमान लगाने का प्रयास करता है। आप नोड के भीतर से चलाने के लिए child_process.spawn का उपयोग कर सकते हैं।

5

आप चाहते हैं माइम प्रकार को देख जा सकता है, और शुक्र है नोड सिर्फ इतना है कि के लिए एक उपयोगी पुस्तकालय है:

https://github.com/bentomas/node-mime#readme

संपादित करें:

आप शायद एक स्थिर संपत्ति, सर्वर पर गौर करना चाहिए और इस सामान में से कोई भी खुद को सेट न करें। आप इसे वास्तव में आसानी से करने के लिए express का उपयोग कर सकते हैं, या स्थिर फ़ाइल मॉड्यूल का एक पूरा होस्ट है, उदा। ecstatic। दूसरी तरफ आपको स्थिर फाइलों को वैसे भी करने के लिए शायद nginx का उपयोग करना चाहिए।

+5

फ़ाइल नाम के आधार पर टाइप प्राप्त करने के लिए वह क्या करना चाहता है, इस पर निर्भर करता है कि यह सबसे अच्छा विचार नहीं है। – ThiefMaster

+0

आह हाँ, सहमत हुए। – timoxley

24

वहाँ माइम प्रकार https://github.com/broofa/node-mime

var mime = require('mime'); 

mime.lookup('/path/to/file.txt');   // => 'text/plain' 

को देख के लिए एक सहायक पुस्तकालय है लेकिन यह अभी भी देखने के लिए एक्सटेंशन का उपयोग करता है, हालांकि

+2

असल में लाइब्रेरी बहुत अच्छी है लेकिन चूंकि थिफ़मास्टर ने टाइमॉक्सली के जवाब पर टिप्पणी की है, यह फ़ाइल एक्सटेंशन पर आधारित है, इसलिए यह एक्सटेंशन के बिना फाइलें डाउनलोड करेगा। – noob

+0

मुझे लगता है कि आपका लिंक टूटा हुआ है ..... – starbeamrainbowlabs

+0

'npm माइम इंस्टॉल करें –

संबंधित मुद्दे