Coldfusion Search HTML <textarea> 然后将 Base64 字符串转换为服务器上的文件

Coldfusion Search HTML <textarea> Then Covert Base64 String To File On Server

编辑: 将文本区域中的 base64 字符串替换为 URL。文本区域是一个所见即所得的编辑器(CKEditor)。我需要将图像上传到服务器文件系统。我正在尝试使用此代码将字符串转换为实际图像,然后在文本区域中将 base64 字符串替换为服务器上图像的位置 (URL)。

<cfset image = imageReadBase64(#LocalOccurrence#)>
<cfimage source="#image#" 
         destination="#save_image_to_this_location# 
         & #name_of_image#  
         & #extension_of_image#" 
         action="write"> 

原题: 使用 ColdFusion,我试图在 HTML 中找到所有 base64 图像字符串,然后将每个字符串作为自己的文件保存在服务器上,创建 URL,然后插入数据库。我现在需要帮助制作一个循环。

到目前为止,我使用以下代码找到了一次 base64 字符串:

<cfset textarea_to_search = #form.overview_text#>
<cfset string_base64_header = "base64,">
<cfset string_base64_ending = '"'>

<cfoutput>
  <cfset mystart = find(#string_base64_header#, #textarea_to_search#)>
  <cfset myend = find(#string_base64_ending#,#textarea_to_search#,#mystart#)>
  <cfset my64 = mid(#textarea_to_search#, (#mystart#+7), ((#myend#-7)-#mystart#))>
  <span style=font-size:8px;"> #mystart#, #myend#, #my64#</span>
</cfoutput>

将原始循环重写为如下所示,但它仅 returns 第一次出现 base64 字符串:

<cfset counter = 1>
<cfset my_array =[]>
<cfoutput>
  <cfloop condition = "counter LTE 5">
    <cfset mystart = find(#string_base64_header#, #textarea_to_search#)>
    <cfset myend = find(#string_base64_ending#,#textarea_to_search#,#mystart#)>
    <cfset my64 = mid(#textarea_to_search#, (#mystart#+7), ((#myend#-7)-#mystart#))>
    <span style=font-size:8px;"> #mystart#, #myend#, #my64#</span>
    <cfset ArrayAppend(my_array, #my64#)>
    <cfset counter = counter+1>
  </cfloop>
  <cfdump var = "#my_array#">

</cfoutput>

您可以通过多种方式解决此问题。可能使用正则表达式是最好的,尽管我无法得到一个简单的例子来说明这个工作。或者,您可以在找到它们时替换字符串中出现的位置,并继续查找直到剩下 none。

对于错误检查/验证等,您必须做比这更多的工作,但这是一个基本示例。 Here's the full example.

<cfset Base64Header = "base64,">
<cfset Base64Ending = '"'>

<cfset ResultsArray =[]>
<cfset ContinueSearching = true>

  <cfloop condition = " ContinueSearching eq true "><cfoutput>

    <cfset StartingIndex = find( Base64Header, SearchText)>

    <cfif StartingIndex eq 0>
        <cfset ContinueSearching = false>
        <cfcontinue/>
    </cfif>

    <cfset EndingIndex = find( Base64Ending , SearchText, StartingIndex )>

    <cfset FullOccurrence =  mid(#SearchText#, (#StartingIndex#), ((#EndingIndex#)-#StartingIndex#))>
    <cfset LocalOccurrence = mid(#SearchText#, (#StartingIndex#+7), ((#EndingIndex#-7)-#StartingIndex#))>

    <cfset ArrayAppend(ResultsArray, #LocalOccurrence#)>

    <cfset SearchText = replace(SearchText, FullOccurrence, "")>

    <cfset StartingIndex = 0>

  </cfoutput></cfloop>

  <cfdump var = "#ResultsArray#">