2010-05-29 20 views
10

आरएफसी के अनुसार, मल्टीपार्ट/फॉर्म-डेटा सामग्री-स्वभाव हेडर फ़ाइल नाम फ़ील्ड पैरामीटर HTTP उद्धृत स्ट्रिंग-स्ट्रिंग के रूप में प्राप्त करता है जहां वर्ण '\' बच सकता है कोई अन्य ascii चरित्र।मल्टीपार्ट/से-डेटा में सामग्री-स्वभाव हेडर का फ़ाइल नाम

समस्या यह है कि वेब ब्राउज़र ऐसा नहीं करते हैं।

IE6 भेजता है:

Content-Disposition: form-data; name="file"; filename="z:\tmp\test.txt" 

के बजाय उम्मीद

Content-Disposition: form-data; name="file"; filename="z:\\tmp\\test.txt" 

कौन सा z:\tmp\test.txt बजाय के नियमों के अनुसार z:tmptest.txt के रूप में पार्स किया जाना चाहिए।

फ़ायरफ़ॉक्स, Konqueror और क्रोम से बच नहीं "उदाहरण के लिए वर्ण:

Content-Disposition: form-data; name="file"; filename=""test".txt" 

इसके बजाय उम्मीद

Content-Disposition: form-data; name="file"; filename="\"test\".txt" 

की तो ... कैसे आप इस मुद्दे से निपटने के लिए सुझाव है कि

?

किसी एक विचार है?

उत्तर

2

क्या कोई कारण है कि आपको इस फ़ाइल नाम को पार्स करने की ज़रूरत है?

कम से कम एक बात यह है कि लगातार है तुम सिर्फ filename=" और अंतिम" के बीच में सब कुछ पढ़ने की जरूरत है कि शीर्ष लेख के filename भाग एक दोहरे उद्धरण के साथ समाप्त होता है, इसलिए।

तो फिर तुम शायद, किसी भी \\, \" या \" एक शाब्दिक बैकस्लैश के रूप में अन्य की तुलना में बैकस्लैश का इलाज जब तक आपको लगता है यह विशेष रूप से संभावना है कि उपयोगकर्ताओं को उन में टैब के साथ फ़ाइल नामों को अपलोड किया जाएगा कर सकते हैं। :)

+2

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

+0

चाहते हैं! = जरूरत है। ;) ठीक है, तो आप कम से कम गारंटी दे रहे हैं कि यह '' '' या '' के साथ खत्म हो जाएगा; '- स्थिरता की इस कमी के साथ आपको कुछ रियायतें देनी होंगी, इस तथ्य पर भरोसा करना कि उपयोगकर्ता अपने फ़ाइल नामों के मध्य में नहीं रखेंगे :) वैकल्पिक रूप से, क्या आप एक वेब ढांचे का समर्थन करते हैं जो समर्थन करता है आपके लिए इस विशेषता का सबसे अच्छा प्रयास पार्सिंग? –

1

हालांकि पुराना धागा, जो भी रुचि हो सकता है उसके लिए नीचे जावा समाधान जोड़ना।

// import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.*; 

    try { 
     ContentDisposition contentDisposition = new ContentDisposition("attachment; filename=\"myfile.log\"; filename*=UTF-8''myfile.log"); 
     System.out.println(contentDisposition.getParameter("filename")); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
+0

चूंकि सवाल जावा के लिए विशेष नहीं है, इस समस्या को सुलझाने का एक स्पष्टीकरण उपयोगी होगा। –

+0

सहमत हुए। एक ही समस्या की तलाश करते समय, मुझे एक धागा भी चर्चा हुई रेगेक्स पैटर्न (http://stackoverflow.com/a/27226712/3940047)। इस समाधान को जोड़ा गया क्योंकि यह किसी भी संदर्भ में किसी की मदद कर सकता है। लोग सिर्फ उचित कीवर्ड के साथ Google पर क्लिक कर सकते हैं और यहां पर उतर सकते हैं और यदि वे जावा लोग होते हैं, तो हो सकता है इसे उपयोगी पाएं। –

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