javascript - ¿Cómo subir una imagen con el cargador Jodit y ColdFusion?
Estoy usando Jodit para crear un editor WYSIWYG. Tengo un archivo de ColdFusion (uploadimage2.cfm) que está vacío. Cuando envío la imagen subida a esa página vacía de ColdFusion, obtengo un error que dice que ColdFusion no puede encontrar la variable "FILES".
Jodit está enviando los siguientes datos de formulario a uploadimage2.cfm:
------WebKitFormBoundaryIrkl9oNQedwACmBe
Content-Disposition: form-data; name="path"
------WebKitFormBoundaryIrkl9oNQedwACmBe
Content-Disposition: form-data; name="source"
default
------WebKitFormBoundaryIrkl9oNQedwACmBe
Content-Disposition: form-data; name="files[0]"; filename="HandShake.JPG"
Content-Type: image/jpeg
------WebKitFormBoundaryIrkl9oNQedwACmBe--
Parece que ColdFusion se queda atascado en la parte name="files[0]". Tengo una función de carga que funciona que no usa Jodit y envía name="image" en su lugar.
No he podido interceptar los datos del formulario para intentar renombrarlos cuando Jodit los envía.
Aquí está mi javascript con el complemento Jodit:
var editor = new Jodit('#newEditor',
uploader: {
url: "uploadimage2.cfm",
filesVariableName: "image"
}
);
¿Cómo puedo enviar los datos del formulario correctos para que ColdFusion no genere errores?
Respuesta #1
Eventualmente descubrí que mi problema estaba en mi archivo application.cfc. La función onRequest estaba intentando evaluar "files[0]" para asegurarse de que no hubiera inyección de scripts en él. Esto se utilizaba para otras cargas de texto de formularios.
Aquí está cómo logré que la carga de Jodit funcionara con ColdFusion en su totalidad:
Mi archivo uploadimage2.cfm:
<!--- set content type to json so jodit can read the response --->
<cfheader name="Content-Type" value="application/json">
<!--- create a structure with necessary objects --->
<cfset responseStruct = structNew()>
<cfset responseStruct["message"] = "File was uploaded">
<cfset responseStruct["error"] = 0>
<cfset responseStruct["path"] = "#application.image_root#">
<cfset responseStruct["images"] = []>
<cfset variables.mediapath="#application.image_upload_root#\">
<!--- loop over the form data to upload each image individually --->
<cfloop collection="#form#" item="i">
<cfif findNoCase("files",i) gte 1>
<cffile action="upload"
fileField="#i#"
destination="#variables.mediapath#"
accept="image/jpg, image/jpeg, image/png, image/gif, image/svg+xml"
nameconflict="makeunique"
result="this_image">
<cfscript>arrayAppend(responseStruct["images"],"#this_image.serverFile#");</cfscript>
</cfif>
</cfloop>
<!--- serialize the structure to json --->
<cfoutput>#serializeJSON(responseStruct)#</cfoutput>
Entonces, en mi inicialización de Jodit:
var editor = new Jodit('#editor',
{
uploader: {
url: "uploadimage2.cfm",
isSuccess: function (resp) {
//this step is necessary for whatever reason, otherwise it will throw an error.
return resp;
},
process: function(resp){
//this was an important step to align the json with what jodit expects.
return {
files: resp.images,
path: resp.path,
baseurl: resp.path,
error: resp.error,
message: resp.message
}
}
}
}
);
