2010-10-07 15 views
7

को मजबूर करने का कोई तरीका है हम एम्बेडेड सीमाओं के कारण सर्वर अंत में कस्टम हैंडलिंग फ़ाइल अपलोड हैं।एचटीएमएल फ़ाइल अपलोड: सामग्री-प्रकार = "एप्लिकेशन/ऑक्टेट-स्ट्रीम"

HTML फ़ाइल अपलोड एक Firefox ब्राउज़र में इस्तेमाल किया कोड:

<html> 
<body> 
    <form action="http:///192.168.1.1/upload.cgi" name="form_1" method="post" enctype="multipart/form-data" > 
     <input type="file" id="file" name="filename" content-type="application/octet-stream"> 
     <input type="submit" name="mysubmit" value="Send"> 
    </form> 
<body> 
</html> 

चयनित फ़ाइल "fish.jpg" कहा जाता है, तो सर्वर के रूप में "image/jpeg" अपनी सामग्री प्रकार प्राप्त करता है। अगर फ़ाइल का नाम फ़ाइल एक्सटेंशन के बिना सिर्फ "मछली" में बदल दिया गया है, तो सर्वर को इसकी सामग्री-प्रकार "एप्लिकेशन/ऑक्टेट-स्ट्रीम" के रूप में प्राप्त होता है जो हम चाहते हैं।

क्या एक HTML पृष्ठ (नियमित जावास्क्रिप्ट के साथ या बिना) में "एप्लिकेशन/ऑक्टेट-स्ट्रीम" को मजबूर करने का कोई तरीका है?

अग्रिम धन्यवाद, बर्ट

+2

क्यों? यदि आप किसी आने वाले डेटा का इलाज करने जा रहे हैं जैसे कि "कुछ बाइट्स जो कुछ का प्रतिनिधित्व कर सकते हैं लेकिन हम नहीं जानते हैं", तो ब्राउजर को दावा करने के लिए मजबूर करने की कोशिश करने के बजाय आपको प्राप्त सामग्री प्रकार को न केवल क्यों नज़रअंदाज़ करें यह नहीं पता कि यह क्या भेज रहा है? – Quentin

उत्तर

1

वहाँ एक HTML पेज (साथ या नियमित रूप से जावास्क्रिप्ट के बिना) में "application/ओकटेट धारा" के लिए मजबूर करने के लिए एक रास्ता है?

आपको इस तरह के HTML में सामग्री-प्रकार सेट नहीं करना चाहिए। बुरे लोग आसानी से बाईपास अपलोड कर सकते हैं। उचित सर्वर-साइड सत्यापन करने का तरीका है।

+1

आप "उचित सर्वर-साइड सत्यापन" कैसे कर सकते हैं? – rboarman

6

संख्या content-type="..." विशेषता नहीं है। multipart/form-data सबpart में जावास्क्रिप्ट के साथ या बिना, आप ब्राउज़र की पसंद Content-Type शीर्षलेख को प्रभावित नहीं कर सकते हैं।

इससे कोई फर्क क्यों पड़ता है? सर्वर-साइड स्क्रिप्ट के लिए यह एक बुरा विचार है कि Content-Type के साथ कुछ भी करें, क्योंकि यह अक्सर गलत होता है। image/jpeg का इलाज application/octet-stream से अलग से अपलोड करता है कुछ ऐसा नहीं किया जाना चाहिए, कम से कम नहीं क्योंकि ब्राउज़र एक जेपीईजी को application/octet-stream या कुछ और (विशेष रूप से, आईई आमतौर पर image/pjpeg भेजना पसंद करता है) अपलोड करना चुन सकता है।

यदि आप सर्वर की ओर नियंत्रण करते हैं और सही फ़ाइल अपलोड करने का प्रकार महत्वपूर्ण है, तो उपयोगकर्ता को इसे मैन्युअल रूप से चुनने के लिए एक इंटरफ़ेस होना चाहिए। (आप डिफ़ॉल्ट मान सेट करने के लिए जावास्क्रिप्ट फ़ाइल एक्सटेंशन स्नीफिंग और/या सामग्री-प्रकार का उपयोग कर सकते हैं, लेकिन किसी पर भरोसा न करें।)

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