2009-05-13 15 views
9

मैं एक फ़ाइल का फ़ाइल नाम कैसे प्राप्त कर सकते हैं इससे पहले कि मैंColdFusion: अपलोड करने

<cffile action = "upload"> 

फोन करने से पहले एक फ़ाइल का नाम मिल सकता है? मैं temp फ़ाइल का फ़ाइल नाम प्राप्त कर सकता हूं, लेकिन वास्तविक फ़ाइल नाम का नहीं। PHP भूमि में मैं जो चाहता हूं उसे पाने के लिए $ _FILES सुपरग्लोबल का उपयोग कर सकता हूं - लेकिन जहां तक ​​मैं कह सकता हूं कि कोल्डफ्यूज़न में ऐसी कोई चीज़ मौजूद नहीं है।

मैं फ़ाइल नाम क्लाइंट साइड प्राप्त कर सकते हैं, लेकिन वास्तव में इस सर्वर साइड क्या करना चाहते हैं।

धन्यवाद

+7

कैसे असाधारण ColdFusion की खासियत इस तरह के बुनियादी कार्यशीलता के लिए नहीं। – Teekin

उत्तर

7

मैं cffile कॉल करने से पहले पता लगाने के लिए एक तरह से के बारे में पता नहीं है, लेकिन एक समाधान हो सकता है।

जब आप <cffile action="upload"> पर कॉल करते हैं तो आप result="variable" का उपयोग करके परिणाम निर्दिष्ट कर सकते हैं। तो, एक temp फ़ाइल के रूप में गंतव्य के साथ अपलोड को कॉल करें। आपका परिणाम चर एक ऐसी संरचना है जिसमें सदस्य क्लाइंटफ़ाइल शामिल है, जो क्लाइंट के कंप्यूटर पर फ़ाइल का नाम है।

अब, आप <cffile action="move"> का उपयोग जो भी हो आप मूल फ़ाइल नाम के साथ क्या करने की जरूरत है ऐसा करने के लिए कर सकते हैं।

+0

जवाब के लिए धन्यवाद ... हम इस समाधान पर विचार के रूप में यह एक ही तरीका हो रहा है। मैं इस प्रश्न को खुला छोड़ दूंगा हालांकि आगे के जवाबों के लिए ... लेकिन मुझे नहीं लगता कि हम जो पोस्ट करते हैं, उससे हम बेहतर हो सकते हैं। – nlaq

+0

यह समस्याओं देता है जब आप उत्तराधिकार –

-1

आप नाम विशेषता इनपुट नियंत्रण पर परिभाषित है, तो फ़ाइल नाम फार्म दायरे में होगा। उदाहरण के लिए:

<cfif not structIsEmpty(form)> 
    <cfdump var="#form#"> 
<cfelse> 
    <html> 
    <head> 
     <title>Title</title> 
    </head> 
    <body> 
     <form method="POST" action="#cgi.SCRIPT_NAME#"> 
      <input type="file" name="fileIn" /> 
      <input type="Submit" name="formSubmit"> 
     </form> 
    </body> 
    </html> 
</cfif> 
+1

में कई ** फाइल अपलोड ** अनुरोध करने अमेरिका tmp फ़ाइल नाम, करते हैं जो हम नहीं चाहते हैं ... – nlaq

+0

ओह देता है, मैं enctype रोका गया था। अब खुद को संशोधित करने के लिए। –

0

एक अन्य विकल्प क्लाइंट-साइड कोड फ़ाइल नाम, जिसे फिर आप सर्वर साइड के लिए होता है के साथ एक गुप्त फ़ॉर्म क्षेत्र को पॉप्युलेट करने के लिए हो सकता है।

बेन कयामत का जवाब आम तौर पर मैं इसे कैसे, हालांकि दृष्टिकोण होता है।

+0

हाँ, हमने यह भी माना। लेकिन आप अपने उपयोगकर्ताओं को इस बात पर भरोसा नहीं कर सकते कि आपके जीवन को दुखी करने के लिए एक भयंकर फायरबग नहीं है। मैं तुम्हें अनुरोध से बैठ जाएं और झंडा उपयोगकर्ता कर सकते हैं लगता है आप पाते हैं कि clientside वर झूठ बोला है (आपके द्वारा अपलोड करते हैं और वास्तविक फ़ाइल नाम प्राप्त) ... लेकिन मैं एक और अधिक elegent समाधान चाहते हैं। हालांकि उत्तर के लिए धन्यवाद :) – nlaq

1

यहां बताया गया है हम यह कर। असल में, एक फ़ाइल फ़ील्ड, और एक स्ट्रिंग फ़ील्ड है। पहले फ़ॉर्म सबमिट किया जाता जावास्क्रिप्ट ब्राउज़र से फ़ाइल नाम पकड़ लेता है। जाहिर है, आप की पुष्टि है कि दूसरे छोर पर फ़ाइल नाम वास्तव में मौजूद है की जरूरत है (यह खाली उपयोगकर्ता, JavaScript अक्षम है, तो उदाहरण के लिए हो जाएगा) और आप (/users/bob/file.jpg बनाम C:\Documents and Settings\bob\file.jpg) मंच मतभेदों को संभालने के लिए स्ट्रिंग पार्स करने की आवश्यकता होगी

<script> 
    function WriteClientFileName(){ 
     $('ClientFileName').value = $('ClientFile').value; 
    } 
</script> 

<form enctype="multipart/form-data" onsubmit="WriteClientFileName();"> 

    <input type="File" name="ClientFile" id="ClientFile"> 
    <input type="hidden" name="ClientFileName" id="ClientFileName" value=""> 

    <input type="submit"> 
</form> 

संयोग से, यह तकनीक क्रॉस-भाषा है। यह आरओआर, पीएचपी, जेएसपी, आदि में समान रूप से अच्छी तरह से काम करेगा।

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

-1

वहाँ कोई रास्ता नहीं ColdFuson, Railo या OpenBD में सर्वर से सहेजने से पहले अपलोड की गई फ़ाइलों के लिए फ़ाइल नाम पता करने के लिए है। मैं आमतौर पर फ़ाइल को सहेजने के पहले createUUID() फ़ंक्शन का उपयोग करके 'मेरा' नया फ़ाइल नाम उत्पन्न करता हूं।

2

वाह, मैं एक महान और आसान समाधान मिल गया! एक छोटे जावास्क्रिप्ट

इस तरह से आप cffile अपलोड और वास्तविक फ़ाइल के लिए अस्थायी फ़ाइल नाम मिलता है।

GetPageContext().formScope().getUploadResource('your_file_input_form_name').getName();

शायद यह एक एडोब सर्वर पर काम करता है और साथ ही: डेटाबेस

<html> 
<head> 
<script type="text/javascript"> 
function PassFileName() 
{ 
document.getElementById("fileName").value=document.getElementById("fileUp").value; 
} 
</script> 
</head> 
<body> 
<form name="form1" method="post" enctype="multipart/form-data" > 
File: <input type="file" name="fileUp" id="fileUp" size="20" onchange="PassFileName()" /> <br /> 
Title: <input type="text" name="Title" id="Title"><br /> 
<input type="hidden" id="fileName" size="20" name="fileName" /> 
<input type="submit" name="submit"> 
</form> 
</body> 
</html> 
6

मैं Railo उपयोग कर रहा हूँ और साथ मूल फ़ाइल नाम पाया के लिए jpg नाम? इसकी काफी काम करता है, तो आप किसी भी तरह अपने अपलोड की गई फ़ाइल का नाम बदलना चाहते हैं और यह दो अस्थायी dirs माध्यम से ले जाया करने के लिए नहीं करना चाहते हैं (Renaming Files As They Are Uploaded (how CFFILE actually works) देखें)

+0

धन्यवाद, मुझे यह बिल्कुल चाहिए। एक जादू की तरह काम करता है! – Mattijs

+0

एफवाईआई यह केवल रेलो में काम करता है, एडोब कोल्डफ्यूजन नहीं। एडोब कोल्डफ्यूज़न में ऐसा करने के लिए मेरा उत्तर देखें। –

14

हाँ यह संभव है। आप cffile टैग का उपयोग करने से पहले ग्राहक फ़ाइल नाम हड़पने के लिए इस सुविधा का उपयोग कर सकते हैं:

<cffunction name="getClientFileName" returntype="string" output="false" hint=""> 
    <cfargument name="fieldName" required="true" type="string" hint="Name of the Form field" /> 

    <cfset var tmpPartsArray = Form.getPartsArray() /> 

    <cfif IsDefined("tmpPartsArray")> 
     <cfloop array="#tmpPartsArray#" index="local.tmpPart"> 
      <cfif local.tmpPart.isFile() AND local.tmpPart.getName() EQ arguments.fieldName> <!--- ---> 
       <cfreturn local.tmpPart.getFileName() /> 
      </cfif> 
     </cfloop> 
    </cfif> 

    <cfreturn "" /> 
</cffunction> 

अधिक यहाँ जानकारी: http://www.stillnetstudios.com/get-filename-before-calling-cffile/

+0

यह काम करता है! धन्यवाद। ऐसा लगता है कि अनुरोध से ऐसी मूलभूत चीज़ प्राप्त करना मुश्किल है, लेकिन यह एक सीएफ डेवलपर का जीवन है। –

+0

निफ्टी समारोह! धन्यवाद। कोल्डफ्यूजन 10 में काम करने की पुष्टि की। – PhilNicholas

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