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

时间:2017-09-01 13:57:46

标签: html coldfusion-11 cfloop

&LT p为H.;&LT;强&gt;编辑:其中/强&GT;用URL替换textarea中的base64字符串。 textarea是WYSIWYG编辑器(CKEditor)。我需要将图像上传到服务器文件系统。我尝试使用此代码将字符串转换为实际图像,然后在textarea中将base64字符串替换为服务器上的图像位置(URL)。&lt; / p&gt; &lt; pre&gt;&lt; code&gt;&lt; cfset image = imageReadBase64(#LocalOccurrence#)&gt; &lt; cfimage source =&#34; #image#&#34;          目的地=&#34;#save_image_to_this_location#          &安培; #name_of_image#          &安培; #extension_of_image#&#34;          行动=&#34;写&#34;&GT; &LT; /代码&GT;&LT; /预&GT; &lt; p&gt;&lt; strong&gt;原始问题:&lt; / strong&gt; 使用ColdFusion,我试图找到HTML中的所有base64图像字符串,然后将每个图像字符串保存为服务器上的自己的文件,创建URL,并插入到数据库中。此时我需要帮助制作一个循环。&lt; / p&gt; &lt; p&gt;我用这段代码找到了一次出现的base64字符串:&lt; / p&gt; &lt; pre&gt;&lt; code&gt;&lt; cfset textarea_to_search =#form.overview_text#&gt; &lt; cfset string_base64_header =&#34; base64,&#34;&gt; &lt; cfset string_base64_ending =&#39;&#34;&#39;&gt; &LT; CFOUTPUT&GT;   &lt; cfset mystart = find(#string_base64_header#,#terttarea_to_search#)&gt;   &lt; cfset myend = find(#string_base64_ending#,#textarea_to_search#,#mystart#)&gt;   &lt; cfset my64 = mid(#textarea_to_search#,(#mystart#+ 7),((#myend#-7) - #mystart#))&gt;   &lt; span style = font-size:8px;&#34;&gt; #mystart#,#myend#,#my64#&lt; / span&gt; &LT; / CFOUTPUT&GT; &LT; /代码&GT;&LT; /预&GT; &lt; p&gt;重写原始循环看起来像这样,但它只返回第一次出现的base64字符串:&lt; / p&gt; &lt; pre&gt;&lt; code&gt;&lt; cfset counter = 1&gt; &lt; cfset my_array = []&gt; &LT; CFOUTPUT&GT;   &lt; cfloop condition =&#34; counter LTE 5&#34;&gt;     &lt; cfset mystart = find(#string_base64_header#,#terttarea_to_search#)&gt;     &lt; cfset myend = find(#string_base64_ending#,#textarea_to_search#,#mystart#)&gt;     &lt; cfset my64 = mid(#textarea_to_search#,(#mystart#+ 7),((#myend#-7) - #mystart#))&gt;     &lt; span style = font-size:8px;&#34;&gt; #mystart#,#myend#,#my64#&lt; / span&gt;     &lt; cfset ArrayAppend(my_array,#my64#)&gt;     &lt; cfset counter = counter + 1&gt;   &LT; / CFLOOP&GT;   &lt; cfdump var =&#34; #my_array#&#34;&gt; &LT; / CFOUTPUT&GT; &LT; /代码&GT;&LT; /预&GT;

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题。可能使用正则表达式是最好的,虽然我无法得到一个简单的例子。或者,您可以在找到它们时替换字符串中的出现次数,并继续查看,直到没有剩余。

你必须做更多的工作才能进行错误检查/验证等,但这是一个基本的例子。 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#">