cf_io.cfm
上传用户:ah_jiwei
上传日期:2022-07-24
资源大小:54044k
文件大小:10k
源码类别:

数据库编程

开发平台:

Visual C++

  1. <cfsetting enablecfoutputonly="Yes">
  2. <!---
  3.  * FCKeditor - The text editor for Internet - http://www.fckeditor.net
  4.  * Copyright (C) 2003-2007 Frederico Caldeira Knabben
  5.  *
  6.  * == BEGIN LICENSE ==
  7.  *
  8.  * Licensed under the terms of any of the following licenses at your
  9.  * choice:
  10.  *
  11.  *  - GNU General Public License Version 2 or later (the "GPL")
  12.  *    http://www.gnu.org/licenses/gpl.html
  13.  *
  14.  *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
  15.  *    http://www.gnu.org/licenses/lgpl.html
  16.  *
  17.  *  - Mozilla Public License Version 1.1 or later (the "MPL")
  18.  *    http://www.mozilla.org/MPL/MPL-1.1.html
  19.  *
  20.  * == END LICENSE ==
  21.  *
  22.  * This file include IO specific functions used by the ColdFusion Connector (MX 6.0 and above).
  23.  *
  24. --->
  25. <cffunction name="CombinePaths" returntype="String" output="true">
  26. <cfargument name="sBasePath" required="true">
  27. <cfargument name="sFolder" required="true">
  28. <cfset sBasePath = RemoveFromEnd( sBasePath, "/" )>
  29. <cfset sBasePath = RemoveFromEnd( sBasePath, "" )>
  30. <cfreturn sBasePath & "/" & RemoveFromStart( ARGUMENTS.sFolder, '/' )>
  31. </cffunction>
  32. <cffunction name="GetResourceTypePath" returntype="String" output="false">
  33. <cfargument name="resourceType" required="true">
  34. <cfargument name="sCommand" required="true">
  35. <cfif ARGUMENTS.sCommand eq "QuickUpload">
  36. <cfreturn REQUEST.Config['QuickUploadPath'][ARGUMENTS.resourceType]>
  37. <cfelse>
  38. <cfreturn REQUEST.Config['FileTypesPath'][ARGUMENTS.resourceType]>
  39. </cfif>
  40. </cffunction>
  41. <cffunction name="GetResourceTypeDirectory" returntype="String" output="false">
  42. <cfargument name="resourceType" required="true">
  43. <cfargument name="sCommand" required="true">
  44. <cfif ARGUMENTS.sCommand eq "QuickUpload">
  45. <cfif isDefined( "REQUEST.Config.QuickUploadAbsolutePath" )
  46. and structkeyexists( REQUEST.Config.QuickUploadAbsolutePath, ARGUMENTS.resourceType )
  47. and Len( REQUEST.Config.QuickUploadAbsolutePath[ARGUMENTS.resourceType] )>
  48. <cfreturn REQUEST.Config.QuickUploadAbsolutePath[ARGUMENTS.resourceType]>
  49. </cfif>
  50. <cfreturn expandpath( REQUEST.Config.QuickUploadPath[ARGUMENTS.resourceType] )>
  51. <cfelse>
  52. <cfif isDefined( "REQUEST.Config.FileTypesAbsolutePath" )
  53. and structkeyexists( REQUEST.Config.FileTypesAbsolutePath, ARGUMENTS.resourceType )
  54. and Len( REQUEST.Config.FileTypesAbsolutePath[ARGUMENTS.resourceType] )>
  55. <cfreturn REQUEST.Config.FileTypesAbsolutePath[ARGUMENTS.resourceType]>
  56. </cfif>
  57. <cfreturn expandpath( REQUEST.Config.FileTypesPath[ARGUMENTS.resourceType] )>
  58. </cfif>
  59. </cffunction>
  60. <cffunction name="GetUrlFromPath" returntype="String" output="false">
  61. <cfargument name="resourceType" required="true">
  62. <cfargument name="folderPath" required="true">
  63. <cfargument name="sCommand" required="true">
  64. <cfreturn CombinePaths( GetResourceTypePath( ARGUMENTS.resourceType, ARGUMENTS.sCommand ), ARGUMENTS.folderPath )>
  65. </cffunction>
  66. <cffunction name="RemoveExtension" output="false" returntype="String">
  67. <cfargument name="fileName" required="true">
  68. <cfset var pos = find( ".", reverse ( ARGUMENTS.fileName ) )>
  69. <cfreturn mid( ARGUMENTS.fileName, 1, Len( ARGUMENTS.fileName ) - pos ) >
  70. </cffunction>
  71. <cffunction name="GetExtension" output="false" returntype="String">
  72. <cfargument name="fileName" required="true">
  73. <cfset var pos = find( ".", reverse ( ARGUMENTS.fileName ) )>
  74. <cfif not pos>
  75. <cfreturn "">
  76. </cfif>
  77. <cfreturn mid( ARGUMENTS.fileName, pos, Len( ARGUMENTS.fileName ) - pos ) >
  78. </cffunction>
  79. <cffunction name="ServerMapFolder" returntype="String" output="false">
  80. <cfargument name="resourceType" required="true">
  81. <cfargument name="folderPath" required="true">
  82. <cfargument name="sCommand" required="true">
  83. <!--- Get the resource type directory. --->
  84. <cfset var sResourceTypePath = GetResourceTypeDirectory( ARGUMENTS.resourceType, ARGUMENTS.sCommand ) >
  85. <!--- Ensure that the directory exists. --->
  86. <cfset var sErrorMsg = CreateServerFolder( sResourceTypePath ) >
  87. <cfif sErrorMsg neq ''>
  88. <cfset SendError( 1, 'Error creating folder "' & sResourceTypePath & '" (' & sErrorMsg & ')' )>
  89. </cfif>
  90. <!--- Return the resource type directory combined with the required path. --->
  91. <cfreturn CombinePaths( sResourceTypePath , ARGUMENTS.folderPath )>
  92. </cffunction>
  93. <cffunction name="GetParentFolder" returntype="string" output="false">
  94. <cfargument name="folderPath" required="true">
  95. <cfreturn rereplace(ARGUMENTS.folderPath, "[/\\][^/\\]+[/\\]?$", "")>
  96. </cffunction>
  97. <cffunction name="CreateServerFolder" returntype="String" output="false">
  98. <cfargument name="folderPath">
  99. <!--- Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms --->
  100. <cfset folderPath = rereplace(ARGUMENTS.folderPath, "//+", "/", "all")>
  101. <cfif directoryexists(ARGUMENTS.folderPath) or fileexists(ARGUMENTS.folderPath)>
  102. <cfreturn "">
  103. <cfelse>
  104. <cftry>
  105. <cfdirectory action="create" mode="0755" directory="#ARGUMENTS.folderPath#">
  106. <cfcatch type="any">
  107. <cfreturn CFCATCH.Message>
  108. </cfcatch>
  109. </cftry>
  110. </cfif>
  111. <cfreturn "">
  112. </cffunction>
  113. <cffunction name="IsAllowedExt" returntype="boolean" output="false">
  114. <cfargument name="sExtension" required="true">
  115. <cfargument name="resourceType" required="true">
  116. <cfif isDefined( "REQUEST.Config.AllowedExtensions." & ARGUMENTS.resourceType )
  117. and listLen( REQUEST.Config.AllowedExtensions[ARGUMENTS.resourceType] )
  118. and not listFindNoCase( REQUEST.Config.AllowedExtensions[ARGUMENTS.resourceType], ARGUMENTS.sExtension )>
  119. <cfreturn false>
  120. </cfif>
  121. <cfif isDefined( "REQUEST.Config.DeniedExtensions." & ARGUMENTS.resourceType )
  122. and listLen( REQUEST.Config.DeniedExtensions[ARGUMENTS.resourceType] )
  123. and listFindNoCase( REQUEST.Config.DeniedExtensions[ARGUMENTS.resourceType], ARGUMENTS.sExtension )>
  124. <cfreturn false>
  125. </cfif>
  126. <cfreturn true>
  127. </cffunction>
  128. <cffunction name="IsAllowedType" returntype="boolean" output="false">
  129. <cfargument name="resourceType">
  130. <cfif not listFindNoCase( REQUEST.Config.ConfigAllowedTypes, ARGUMENTS.resourceType )>
  131. <cfreturn false>
  132. </cfif>
  133. <cfreturn true>
  134. </cffunction>
  135. <cffunction name="IsAllowedCommand" returntype="boolean" output="true">
  136. <cfargument name="sCommand" required="true" type="String">
  137. <cfif not listFindNoCase( REQUEST.Config.ConfigAllowedCommands, ARGUMENTS.sCommand )>
  138. <cfreturn false>
  139. </cfif>
  140. <cfreturn true>
  141. </cffunction>
  142. <cffunction name="GetCurrentFolder" returntype="String" output="false">
  143. <cfset var sCurrentFolder = "/">
  144. <cfif isDefined( "URL.CurrentFolder" )>
  145. <cfset sCurrentFolder = URL.CurrentFolder>
  146. </cfif>
  147. <!--- Check the current folder syntax (must begin and start with a slash). --->
  148. <cfif not refind( "/$", sCurrentFolder)>
  149. <cfset sCurrentFolder = sCurrentFolder & "/">
  150. </cfif>
  151. <cfif not refind( "^/", sCurrentFolder )>
  152. <cfset sCurrentFolder = "/" & sCurrentFolder>
  153. </cfif>
  154. <!--- Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms --->
  155. <cfset sCurrentFolder = rereplace( sCurrentFolder, "//+", "/", "all" )>
  156. <cfif find( "..", sCurrentFolder)>
  157. <cfset SendError( 102, "" )>
  158. </cfif>
  159. <cfreturn sCurrentFolder>
  160. </cffunction>
  161. <cffunction name="SanitizeFolderName" returntype="String" output="false">
  162. <cfargument name="sNewFolderName" required="true">
  163. <!--- Do a cleanup of the folder name to avoid possible problems --->
  164. <!--- Remove .  / | : ? * " < > --->
  165. <cfset sNewFolderName = rereplace( sNewFolderName, '.+|\+|/+||+|:+|?+|*+|"+|<+|>+', "_", "all" )>
  166. <cfreturn sNewFolderName>
  167. </cffunction>
  168. <cffunction name="BinaryFileRead" returntype="String" output="true">
  169. <cfargument name="fileName" required="true" type="string">
  170. <cfargument name="bytes" required="true" type="Numeric">
  171. <cfscript>
  172. var chunk = "";
  173. var fileReaderClass = "";
  174. var fileReader = "";
  175. var file = "";
  176. var done = false;
  177. var counter = 0;
  178. var byteArray = "";
  179. if( not fileExists( ARGUMENTS.fileName ) )
  180. {
  181. return "" ;
  182. }
  183. if (REQUEST.CFVersion gte 8)
  184. {
  185.  file  = FileOpen( ARGUMENTS.fileName, "readbinary" ) ;
  186.  byteArray = FileRead( file, 1024 ) ;
  187.  chunk = toString( toBinary( toBase64( byteArray ) ) ) ;
  188.  FileClose( file ) ;
  189. }
  190. else
  191. {
  192. fileReaderClass = createObject("java", "java.io.FileInputStream");
  193. fileReader = fileReaderClass.init(fileName);
  194. while(not done)
  195. {
  196. char = fileReader.read();
  197. counter = counter + 1;
  198. if ( char eq -1 or counter eq ARGUMENTS.bytes)
  199. {
  200. done = true;
  201. }
  202. else
  203. {
  204. chunk = chunk & chr(char) ;
  205. }
  206. }
  207. }
  208. </cfscript>
  209. <cfreturn chunk>
  210. </cffunction>
  211. <cffunction name="SendUploadResults" returntype="String" output="true">
  212. <cfargument name="errorNumber" required="true" type="Numeric">
  213. <cfargument name="fileUrl" required="false" type="String" default="">
  214. <cfargument name="fileName" required="false" type="String" default="">
  215. <cfargument name="customMsg" required="false" type="String" default="">
  216. <cfoutput>
  217. <script type="text/javascript">
  218. window.parent.OnUploadCompleted( #errorNumber#, "#JSStringFormat(fileUrl)#", "#JSStringFormat(fileName)#", "#JSStringFormat(customMsg)#" );
  219. </script>
  220. </cfoutput>
  221. <cfabort>
  222. </cffunction>
  223. <cffunction name="SanitizeFileName" returntype="String" output="false">
  224. <cfargument name="sNewFileName" required="true">
  225. <cfif isDefined("REQUEST.Config.ForceSingleExtension") and REQUEST.Config.ForceSingleExtension>
  226. <cfset sNewFileName = rereplace( sNewFileName, '.(?![^.]*$)', "_", "all" )>
  227. </cfif>
  228. <!--- Do a cleanup of the file name to avoid possible problems --->
  229. <!--- Remove  / | : ? * " < > --->
  230. <cfset sNewFileName = rereplace( sNewFileName, '\[.]+|\+|/+||+|:+|?+|*+|"+|<+|>+', "_", "all" )>
  231. <cfreturn sNewFileName>
  232. </cffunction>