2011-08-24 11 views
5

मैं एक फ़ाइल अपलोड करने के लिए स्प्रिंग 3 क्षमता का उपयोग कर रहा हूँ। मैं यह सत्यापित करने का सबसे अच्छा तरीका जानना चाहता हूं कि फ़ाइल एक निश्चित प्रकार का है, विशेष रूप से एक सीएसवी फ़ाइल। मुझे यकीन है कि एक्सटेंशन की जांच बेकार है और वर्तमान में मैं अपलोड की गई फ़ाइल के सामग्री प्रकार की जांच कर रहा हूं। मैं बस यह सुनिश्चित करता हूं कि यह "टेक्स्ट/सीएसवी" प्रकार का है। और यह स्पष्ट करने के लिए कि क्लाइंट द्वारा अपलोड की गई एक फ़ाइल है जिसका अर्थ है कि मेरे मूल का कोई नियंत्रण नहीं है।स्प्रिंग एमवीसी अपलोड फ़ाइल - सामग्री प्रकार कैसे निर्धारित करता है?

मुझे उत्सुकता है कि कैसे वसंत/ब्राउज़र निर्धारित करता है कि सामग्री का प्रकार क्या है? क्या यह निर्धारित करने का सबसे अच्छा/सुरक्षित तरीका है कि किस प्रकार की फाइल अपलोड की गई है? क्या मैं कभी 100% निश्चित हो सकता हूं?

अद्यतन: फिर मैं यह नहीं सोच रहा कि सामग्री का प्रकार फ़ाइल का क्या है, लेकिन सामग्री प्रकार कैसे निर्धारित होता है। वसंत/ब्राउजर कैसे जानता है कि अपलोड की गई फ़ाइल के आधार पर सामग्री प्रकार "टेक्स्ट/सीएसवी" है?

+0

एक ही समस्या थी। वसंत सामान्य जावा फाइलों की तरह "कंटेनर से निर्धारित" विकल्प का समर्थन क्यों नहीं करता है? अगर मैं अपने मैवेन मॉड्यूल में एनटीएफ -8 के रूप में एन्कॉन्डिंग सेट करता हूं तो मुझे उम्मीद है कि मेरी फाइलों में डिफ़ॉल्ट रूप से यह एन्कोडिंग होगा और मुझे मैन्युअल रूप से – borjab

उत्तर

1

आप

org.springframework.web.multipart.commons.CommonsMultipartFile वस्तु का उपयोग कर सकते हैं।

इसमें getContentType(); विधि है। निम्न उदाहरण http://www.ioncannon.net/programming/975/spring-3-file-upload-example/

तुम सिर्फ CommonsMultipartFile वस्तु पर साधारण परीक्षण जोड़ सकते हैं और त्रुटि पृष्ठ पर अगर यह सामग्री प्रकार गलत है अनुप्रेषित कर सकते हैं पर

देखो।

+0

में बदलने की आवश्यकता नहीं होगी, मुझे लगता है कि मेरा प्रश्न गलत है। मैं getContentType() के बारे में जानता हूं और इसे पहले से उपयोग कर रहा हूं। प्रश्न यह है कि उस सामग्री प्रकार को कैसे निर्धारित किया जाता है? मुझे एक सहयोगी के साथ बहस हो रही है और वह सोचता है कि सामग्री प्रकार विस्तार से अधिक उपयोगी नहीं है क्योंकि इसे मनमाने ढंग से किसी भी चीज़ पर सेट किया जा सकता है। लेकिन मुझे उत्सुकता है कि कैसे वसंत/ब्राउज़र कहता है कि यह फ़ाइल "टेक्स्ट/सीएसवी" है? इसका उद्देश्य एक ऐसी फ़ाइल को अस्वीकार करना है जो एक वास्तविक सीएसवी फ़ाइल नहीं है, आप वास्तव में यह सुनिश्चित कैसे कर सकते हैं? – sauce

0

आप क्यों नहीं बस आप सत्यापनकर्ता में फ़ाइल नाम लेने के लिए और इसे विभाजित नहीं है, फ़ाइल प्रकार fileName.split ("। \") [Filename.length() - 1] है स्ट्रिंग

+0

फ़ाइल एक्सटेंशन अनिवार्य रूप से बेकार हैं, यह सही दिशा में एक नज़र है लेकिन इसे काटने वाला नहीं है। आपके पास कोई एक्सटेंशन नहीं हो सकती है जो वास्तव में एक CSV फ़ाइल है और किसी भी तरह ब्राउज़र/स्प्रिंग जानता है कि यह किस प्रकार की फाइल है। मैं सोच रहा हूं कि यह कैसे जानता है। – sauce

1

आप तो प्रति पंक्ति फ़ाइल में अल्पविरामों की संख्या भी गिन सकते हैं। फ़ाइल की प्रत्येक पंक्ति पर सामान्य रूप से एक ही सीएसवी फ़ाइल होने के लिए कॉमा की समान मात्रा होनी चाहिए।

+0

छोटी फाइलों के लिए कोई बुरा विचार नहीं है .. लेकिन 100k लाइनों वाली फाइलें शायद उन सभी के माध्यम से जाने के लिए व्यावहारिक नहीं हैं। मुझे लगता है कि आप पहली 10 लाइनों या कुछ की जांच कर सकते हैं।बिल्कुल वही नहीं जो मैं खोज रहा था लेकिन मैन्युअल रूप से सत्यापित करने का एक और तरीका है। मेरी इच्छा है कि मुझे पता था कि मैं सामग्री प्रकार पर सही भरोसा कर सकता हूं। – sauce

0

ठीक है, इस मामले में मैं आपको सीएसवीडर जावा पुस्तकालय का उपयोग करने का सुझाव देता हूं। आपको बस अपनी सीएसवीडर ऑब्जेक्ट की जांच करनी है और यह सब कुछ है।

0

जहां तक ​​मुझे पता है कि getContentType(String) विधि उपयोगकर्ता एजेंट जो कुछ भी बताती है उससे उसका मूल्य प्राप्त करती है - इसलिए आप सावधान रहना सही हैं क्योंकि इसे आसानी से धोखा दिया जा सकता है।

बाइनरी फ़ाइलों के लिए आप magic number देख सकते हैं या लाइब्रेरी का उपयोग कर सकते हैं, जैसे कि माइम-यूज या jMimeMagic। जावा 7 के बाद भी Files.probeContentType(String) है लेकिन यह केवल डिस्क पर फ़ाइलों के साथ काम करता है और कुछ ओएस पर बग की सूचना दी गई है।

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