2017-09-01 8 views
0

EDIT: Remplacez la chaîne base64 figurant dans la zone de texte par une URL. La zone de texte est un éditeur WYSIWYG (CKEditor). Je dois télécharger une image dans le système de fichiers du serveur. J'essaie d'utiliser ce code pour convertir la chaîne en une image réelle, puis dans la zone de texte en remplaçant la chaîne base64 par l'emplacement de l'image sur le serveur (URL).Coldfusion Search HTML <textarea> Ensuite, masquez la chaîne Base64 vers le fichier sur le serveur

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

Original Question: Utilisation de ColdFusion, essaie de trouver toutes les chaînes d'images de l'intérieur base64 HTML puis enregistrez chacun comme son propre fichier sur le serveur, créer URL et insérer dans la base de données. J'ai besoin d'aide pour créer une boucle à ce stade.

J'ai eu que de trouver loin une seule occurrence de la chaîne base64 avec ce code:

<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> 

récrit la boucle d'origine pour ressembler à cela, mais il ne retourne que la première occurrence de la chaîne 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> 

Répondre

0

Il y a plusieurs façons de procéder. Peut-être avec une regex serait le meilleur, bien que je ne pourrais pas obtenir un exemple facile de ce travail. Vous pouvez également remplacer les occurrences de la chaîne lorsque vous les trouvez et continuer à chercher jusqu'à ce qu'il n'y en ait plus.

Vous devrez faire plus de travail que cela pour la vérification d'erreurs/validation, etc, mais voici un exemple de base. 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#"> 
+0

C'est génial! Pouvez-vous me montrer comment créer une URL pour remplacer la chaîne base64? J'ai considéré l'utilisation de replace(), cependant, je pense que je dois juste utiliser ce que vous m'avez donné ici et définir une variable à une URL. J'ai essayé ceci:

+0

Pas tout à fait sûr que je comprends ce que vous ' re demande. Si vous éditez votre question, et ajoutez cette partie avec un peu plus de détails, je parie que nous pouvons y arriver. – luxdvie