Perché non posso passare un campo forma di file di testo in un CFFUNCTION utilizzando la sintassi struttura?

StackOverflow https://stackoverflow.com/questions/2765737

Domanda

Sto cercando di passare un campo di modulo di tipo "file" ad un CFFUNCTION. Il tipo di argomento è "qualsiasi". Ecco la sintassi che sto cercando di utilizzare (pseudocodice):

<cfloop from="1" to="5" index="i">
    <cfset fieldname = "attachment" & i />

    <cfinvoke component="myComponent" method="attachFile">
        <cfinvokeargument name="attachment" value="#FORM[fieldname]#" />
    </cfinvoke>
</cfloop>

Il ciclo è stato fatto perché ci sono cinque campi di form denominato "attachment1", "attachment2", et al.

Questo genera un'eccezione nella funzione:

coldfusion.tagext.io.FileTag$FormFileNotFoundException: The form field C:\ColdFusion8\...\neotmp25080.tmp did not contain a file.

Tuttavia, questa sintassi funziona:

<cfloop from="1" to="5" index="i">
    <cfinvoke component="myComponent" method="attachFile">
        <cfinvokeargument name="attachment" value="FORM.attachment#i#" />
    </cfinvoke>
</cfloop>

Non mi piace scrivere codice come quello nel secondo esempio. Sembra proprio come una cattiva pratica per me.

Quindi, qualcuno può dirmi come utilizzare la sintassi struttura per passare correttamente un campo di modulo tipo di file per un CFFUNCTION ??

È stato utile?

Soluzione

Nel tuo primo codesnippet i Esamina valore #FORM[fieldname]# al nome del file caricato. Così si sta inviando il nome del file per la funzione al posto del nome del campo che contiene il nome del file.

Se si vuole attaccare con la struttura di notazione è possibile utilizzare

<cfinvokeargument name="attachment" value="FORM['#fieldname#']" />

o

<cfinvokeargument name="attachment" value="FORM.#fieldname#" />

, invece. Anche io non credo che ci sia qualcosa di sbagliato con il vostro (di lavoro) esempio secondo codice.

Modifica

Sembra come se <cffile> non può valutare la filefield se si passa sul campo utilizzando la notazione struct, a causa di qualche valutazione automatica magia del parametro. Dopo alcuni ulteriori indagini ho scoperto che passando solo il nome del formfield senza il prefisso modulo sarebbe anche il lavoro.

<cfinvokeargument name="attachment" value="#fieldname#" />

Il parametro filefield è documentato come stringa, che contiene il nome del formfield, senza prefisso. Il mio ultimo approccio sembra più "giusto" per me. Sarebbe anche nascondere l'implementazione di un po 'di più. Non sono inoltre tanto composizione portata / struct var / tasti di fuori di un componente o funzione e poi passarlo nella funzione. Questo dovrebbe essere fatto in meglio la funzione stessa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top