2010-01-20 18 views
7

में एक डाउनलोड पेज बनाना मेरे पास एक ऐसा एप्लिकेशन है जो व्यवस्थापक को फ़ाइलों को अपलोड करने की अनुमति देता है। ये फ़ाइलें वेब रूट के बाहर संग्रहीत हैं ताकि वे किसी URL के माध्यम से पहुंच योग्य न हों। अतीत में, हमने हमेशा नीचे दिए गए कोड का उपयोग किया है ताकि फ़ाइल को अधिकृत उपयोगकर्ताओं को वापस सेवा दी जा सके। क्या प्रकार निर्दिष्ट करने के लिए कोई बेहतर या अधिक सार्वभौमिक तरीका है? यह विशेष रूप से प्रासंगिक होता है जब व्यवस्थापक को कई अलग-अलग प्रकार की फाइलें अपलोड करने की अनुमति होती है।कोल्डफ्यूजन 8

<cfheader name="content-disposition" value="filename=#queryname.filename#"> 
<cfcontent type="application/unknown" file="#application.pathToDataDirectory#/#queryname.filename#"> 

उत्तर

6

जहां तक ​​मुझे पता है, मुझे नहीं लगता कि कोई वास्तविक "माइम-टाइप" किसी भी प्रकार की फ़ाइल में लिखा गया है। यह ऐसा कुछ है जो ब्राउज़र को इसके बारे में चेतावनी देता है कि इसके रास्ते क्या आ रहा है।

कई "स्मार्ट माइम-प्रकार" फ़ंक्शंस का उल्लेख यहां किया गया है (दूसरी टिप्पणी भी ध्यान दें)। मैं इन की कोशिश की है नहीं, लेकिन वे आपकी आवश्यकताओं के अनुरूप होना चाहिए: आप अपने खुद के "स्मार्ट माइम-प्रकार" समारोह लिखना चाहते थे तो http://www.coldfusionmuse.com/index.cfm/2006/8/2/mime.types

, आप आसानी से ColdFusion में इस पीएचपी समारोह में परिवर्तित कर सकते: http://snipplr.com/view/11451/get-file-mimetype/

+0

हमने PHP फ़ंक्शन को पुन: प्रयास करने का अंत किया, धन्यवाद – Jason

1

कुछ हद तक देर से लिया गया , लेकिन फ़ाइल अपलोड होने पर आप एमआईएमई प्रकार को कैप्चर और सेव क्यों नहीं करते? <cffile> इसे cffile.contentType और cffile.contentSubType में लौटाता है, इसलिए यह बिल्कुल कठिन नहीं है। आपको निश्चित रूप से पूर्व-मौजूदा फ़ाइलों पर एक स्वीप चलाने की आवश्यकता होगी, लेकिन यह आसानी से लिखित एक-ऑफ है।

FWIW, मेरी फ़ाइल डाउनलोड कोड फ़ाइल आकार और संशोधित दिनांक भी भेजता है, और अनमोडिफाइड फ़ाइलों के लिए पुनः अनुरोध के लिए चेक करता है। प्रमाणीकरण/प्रमाणीकरण जांच के बाद यह सब: बेशक:

<cfset modified=parsedatetime(queryname.datestamp)/> 

<cfif structkeyexists(cgi, "http_if_modified_since")> 
<cfif parsedatetime(cgi.http_if_modified_since) gt modified> 
    <cfheader statuscode=304 statustext="Not modified"/> 
    <cfabort/> 
</cfif> 
</cfif> 

<cfheader name="Content-Disposition" value='disposition=#disposition#; filename="#queryname.filename#"'/> 
<cfheader name="Content-Length" value=#queryname.size#/> 
<cfheader name="Last-Modified" value=#gethttptimestring(modified)#/> 
<cfcontent type=#queryname.mimetype# file="application.pathToDataDirectory/#queryname.filename#"/> 
संबंधित मुद्दे