2010-01-14 11 views
5

मेरे पास एक बहुत ही सरल फ़ाइल अपलोड है जो उपयोगकर्ताओं को पीडीएफ फाइल अपलोड करने की अनुमति देता है। एक और पेज पर मैं उन फ़ाइलों को एंकर टैग के माध्यम से संदर्भित करता हूं। हालांकि, ऐसा लगता है कि जब कोई उपयोगकर्ता पाउंड साइन (#) वाली फ़ाइल अपलोड करता है तो यह एंकर टैग को तोड़ देता है। यह किसी भी प्रकार की कोल्डफ्यूजन त्रुटि का कारण नहीं बनता है, यह फ़ाइल को नहीं ढूंढ सकता है। अगर मैं # को हटा देता हूं, तो यह ठीक काम करता है। मुझे यकीन है कि ऐसे कई अन्य पात्र हैं जिनके पास एक ही समस्या होगी।फ़ाइल नाम में पाउंड साइन (#) त्रुटि

मैंने एंकर के अंदर फ़ाइल नाम के आसपास URLEncodedFormat() डालने का प्रयास किया है लेकिन इससे मदद नहीं मिलती है। एकमात्र अन्य चीज जिसे मैं सोच सकता था, फाइल को हर बार अपलोड करने और "#" चरित्र (और कोई अन्य "खराब" चरित्र) को हटाने का था।

एक आसान समाधान होना चाहिए। कोई विचार?

+0

प्रत्येक बार अपलोड होने पर फ़ाइल का नाम बदलें और "#" वर्ण (और कोई अन्य "खराब" चरित्र) हटा दें। हाँ। – Henry

उत्तर

5

आप नियंत्रित तो फाइल अपलोड कोड

IsValid("url",usersFileName) or 
IsValid("regex",usersFileName,"[a-zA-Z0-9]") 

अन्यथा के साथ स्ट्रिंग मान्य अगर आप रेगुलर एक्सप्रेशन के साथ सहज हैं मैं पिछले पोस्टर की तरह कुछ सुझाव है कि कोशिश

REReplace(usersfilename,"[^a-zA-Z0-9]","","ALL") 

इन नमूनों पर टिप्पणी कर रहे हैं मान लें कि आप ".pdf" जोड़ देंगे और केवल अक्षरों और संख्याओं को अनुमति देंगे। आप अंडरस्कोर की जरूरत है या अवधि में यह इस प्रकार दिखाई देगा ...

REReplace(usersfilename,"[^a-zA-Z0-9\._]","","ALL") 

मैं एक regex गुरु नहीं कर रहा हूँ, अगर मैं इन गलत में से एक है मुझे यकीन है कि में कूद और मुझे सही करें :)

जाएगा कई हूँ तो
+1

हां, हम बाद की अभिव्यक्ति के समान कुछ करते हैं। लेकिन हटाए गए अक्षरों को "_" जैसे कुछ स्पष्ट करने के लिए फ़ाइल नाम बदल दिया गया था। कड़ाई से व्यक्तिगत वरीयता हालांकि :) – Leigh

+0

यह एक बहुत अच्छा दृष्टिकोण है। इच्छा है कि मैं इसके बारे में सोचा था। –

+0

यह मैं जितना कम या कम करता हूं। लेघ की तरह, मैं सभी प्रतिस्थापित वर्णों को '_' के साथ उपयोगकर्ता को अलर्ट के रूप में बदल देता हूं। – ale

0

पाउंड संकेत वेब पर फ़ाइल नामों के भीतर कानूनी नहीं हैं। वे इन-पेज लंगर लक्ष्यों के लिए उपयोग किया जाता है:

<a name="target"> 

तो अगर आप फ़ाइल # name.pdf है, ब्राउज़र वास्तव में फ़ाइल "फाइल" और आंतरिक लंगर "name.pdf" के लिए लग रही है।

हां, आपको अपलोड पर अपनी फ़ाइलों का नाम बदलना होगा।

+0

मैं समझता हूं कि मुझे नाम बदलना होगा। मेरा सवाल यह होगा कि # चरित्र के साथ-साथ किसी अन्य व्यक्ति की देखभाल करने का सबसे आसान समाधान क्या है जो मुद्दों का कारण बन सकता है। – Jason

+0

प्रतिस्थापित करें() या प्रतिस्थापित करें() – Henry

+1

@ बेन - मैं गलत हो सकता हूं, लेकिन मुझे नहीं लगता कि आपको "नाम बदलना है"। उचित रूप से # चिह्न को एन्कोड करना चाहिए (यानी फ़ाइल% 23.pdf)। लेकिन मैं इस बात से सहमत हूं कि नामकरण बेहतर विकल्प है (विशेष रूप से सीएफ की संवेदनशीलता # को दिया गया है)। – Leigh

-1

शायद आपको इससे बचने के लिए ## के साथ # को प्रतिस्थापित करना होगा, मुझे लगता है कि ऐसा इसलिए हुआ क्योंकि # कोल्डफ्यूजन कीवर्ड के रूप में माना जाता है।

+2

कोल्डफ्यूजन में कोई समस्या नहीं है। मुद्दा यह है कि यह इसे पृष्ठ पर नामित एंकर के रूप में पढ़ता है। – Jason

0

मैं अभी तक टिप्पणी नहीं कर सकता, लेकिन केविंक का समाधान तब तक अच्छा है जब तक कि आप जो भी बदल रहे हैं उसे बनाए रखने की आवश्यकता न हो।

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

<cfset newName = replace(thisFile, "##", "(pound)", "All")> 
<cfset newName = replace(newName , "&", "(amp)", "All")> 
<cffile action="rename"source = "#ExpandPath("\uploads\#thisFolder#\#thisFile#")#" destination = "#newName#">