* दूसरे भाग के लिए नया अपडेट किया गया - अब "308 अपूर्ण फिर से शुरू करें", हालांकि फ़ाइल केवल एक अपलोड होना चाहिए!कोल्डफ्यूजन का उपयोग करके Google ड्राइव पर फ़ाइलें अपलोड करें
मैं रे कैमडेन से cfgoogle
की नींव का उपयोग कर रहा हूं। लेकिन Google ने दस्तावेज़ अपलोड के लिए कोड को बहिष्कृत कर दिया है। नया मानक Resumable Media Uploads है।
मेरे पास यह हिस्सा काम कर रहा है (उपरोक्त संदर्भित Google दस्तावेज़ में "एक पुन: अपलोड करने योग्य अपलोड अनुरोध आरंभ करना" सहित)।
कॉलिंग पृष्ठ:
<cffunction name="upload_auth" access="public" returnType="any" hint="I get a uniqu URI from Google API." output="false">
<cfargument name="myFile" type="string" required="true" hint="filepath to upload.">
<cfargument name="myType" type="string" required="true" hint="application/msword">
<cfargument name="myTitle" type="string" required="true" hint="name of doc">
<cfset GoogleUrl = "https://docs.google.com/feeds/upload/create-session/default/private/full">
<cfset GoogleVersion = 3>
<cfset FileSize = createObject("java","java.io.File").init(myFile).length()>
<cfhttp url="#GoogleUrl#" method="post" result="diditwork" resolveurl="no">
<cfhttpparam type="header" name="Authorization" value="GoogleLogin auth=#getAuth(variables.docservice)#">
<cfhttpparam type="header" name="GData-Version" value="#GoogleVersion#">
<cfhttpparam type="header" name="Content-Length" value="0">
<cfhttpparam type="header" name="X-Upload-Content-Type" value="#myType#">
<cfhttpparam type="header" name="X-Upload-Content-Length" value="#FileSize#">
<cfhttpparam type="header" name="Slug" value="#myTitle#">
</cfhttp>
<cfreturn diditwork>
</cffunction>
:
<cfset application.cfc.Google = createObject('component','#path_cf_cfc#Google') />
<cfset application.cfc.GoogleDocs = createObject('component','#path_cf_cfc#GoogleDocs') />
<cfset gtoken = application.cfc.GoogleDocs.authenticate(emailaddress,password)>
<CFSET testdoc = "a\filepath\documentname.doc">
<CFSET FileType = "application/msword">
<CFSET FileTitle = "test_001">
<cfset temp = application.cfc.GoogleDocs.upload_auth("#Application.Map.DocStorage##tv.testdoc#",FileType,FileTitle)>
<CFSET uploadpath = Listgetat(Listgetat(temp.header,ListContains(temp.header,"https://docs.google.com","#chr(10)#"),"#chr(10)#"),2," ") >
<cfset temp2 = application.cfc.GoogleDocs.upload_file("#Application.Map.DocStorage##tv.testdoc#",FileType,FileTitle,uploadpath)>
कोड अप करने के लिए काम करता है और cfset
अस्थायी लाइन
यहाँ (विशिष्ट अपलोड यूआरआई हो रही) सहित upload_auth के लिए कोड है ठीक है - तो बहुत अच्छा है। लेकिन यहां वह स्थान है जहां यह टूट जाता है:
अपलोड_फाइल रिटर्न चला रहा है "308 अपूर्ण फिर से शुरू करें" (ऐसा नहीं है कि यह 400 नहीं है!) Google से। अरे !!
<cffunction name="upload_file" access="public" returnType="any" hint="I upload the document." output="false">
<cfargument name="myFile" type="string" required="true" hint="filepath to upload.">
<cfargument name="myType" type="string" required="true" hint="like application/msword">
<cfargument name="myTitle" type="string" required="true" hint="name of doc">
<cfargument name="myAuthPath" type="string" required="true" hint="call auth">
<cfset FileSize = GetFileInfo(myFile).size >
<CFSET tv.tostartwithzero = FileSize - 1>
<CFFILE action="read" file="#myfile#" variable="FileText">
<cfhttp url="#myAuthPath#" method="put" result="diditwork" resolveurl="no" multipart="yes" charset="utf-8" >
<cfhttpparam type="header" name="Authorization" value="GoogleLogin auth=#getAuth(variables.docservice)#">
<cfhttpparam type="header" name="GData-Version" value="#variables.GoogleVersion#">
<cfhttpparam type="header" name="Content-Length" value="#FileSize#">
<cfhttpparam type="header" name="Content-Range" value="bytes 0-#tv.tostartwithzero#/#FileSize#">
<cfhttpparam type="header" name="Content-Type" value="#myType#">
<cfhttpparam type="body" value="#trim(FileText)#">
</cfhttp>
<cfreturn diditwork>
</cffunction>
इसलिए, हमारे पास है - - मैं कहाँ अटक कर रहा हूँ
यहाँ upload_file है। मैं अद्वितीय यूआरआई प्राप्त कर सकता हूं, लेकिन (शायद क्योंकि रात में देर हो चुकी है) मैं फ़ाइल अपलोड को पूरा करने के लिए अन्यथा गलत कर रहा हूं, इस पर मस्तिष्क मर चुका हूं।
सभी मदद की सराहना की जाती है।
मुझे लगता है कि सामग्री-श्रेणी शीर्षलेख में आप डिस्क आकार को पढ़ने के रूप में फ़ाइल आकार का उपयोग कर रहे हैं, लेकिन शरीर में, आप ट्रिम (फ़ाइलटेक्स्ट) भेज रहे हैं, जिसका अर्थ है कि अगर फ़ाइल में अग्रणी या पिछली जगहें हैं, तो अनुरोध करें कि शरीर का आकार उस आकार से छोटा होगा जो आप भेजने का दावा कर रहे हैं। सामग्री-रेंज और सामग्री-लंबाई शीर्षलेखों में आपके द्वारा भेजने की सीमा और आकार की गणना करने के लिए आप लेन (ट्रिम (फ़ाइलटेक्स्ट)) का उपयोग करने का प्रयास कर सकते हैं? – barnyr
आप फ़ाइल रीडबिनरी करने का प्रयास कर सकते हैं और अनुरोध निकाय में भेज सकते हैं, जब तक कि फ़ाइल सामग्री को ट्रिम करने का कोई कारण न हो – barnyr
क्या आपको यह हल हो गया? निम्नलिखित [यहां] मिला (http://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal)। _ फिर से शुरू करने के अनुरोध के सामग्री निकाय को प्राप्त करने के बाद, सर्वर में अभी भी पूर्ण बाइट रेंज नहीं हो सकती है, जिसके लिए ग्राहक से आगे की कार्रवाई (जैसे अतिरिक्त अनुरोध) की आवश्यकता होती है। ऐसे मामलों में, सर्वर को स्टेटस कोड 308 (अपूर्ण फिर से शुरू करें) वापस करना चाहिए यदि यह अभी भी ऑपरेशन जारी रखने के लिए तैयार है। _ _By परिभाषा, 308 (अपूर्ण) फिर से प्रतिक्रिया दर्शाती है कि क्लाइंट बाइट्स भेजकर वर्तमान त्रुटि स्थिति को सुधार सकता है जो सर्वर गायब है –