Формы Coldfusion и загрузка изображений с помощью cffile

Я изучаю Coldfusion, и у меня возникли проблемы с этим небольшим приложением, которое я создаю для коллеги.

Вот первая страница: http://pastebin.com/aLPYHPsF

Как видите, я хочу получить пользовательский ввод, взять этот ввод и вывести его в html. Текстовый материал работает нормально, но я не могу загрузить изображение! Я хочу, чтобы пользователь щелкнул «Загрузить», получил подтверждение, затем щелкнул «Отправить», и они были отправлены на сгенерированную страницу html (cfm). На странице находится измененная версия изображения, которое они загрузили. Пожалуйста, скажите мне, что я делаю неправильно! Прямо сейчас, когда нажимается «загрузить», форма просто сбрасывается.


person Tyler    schedule 11.08.2010    source источник


Ответы (2)


Это из-за того, что вы забыли присвоить enctype="multipart/form-data" вашей первой cfform. Я отредактировал часть вашего кода. Проверьте это.

<cfset strPath = ExpandPath( "./" ) />
<cfset strPath = GetDirectoryFromPath(GetCurrentTemplatePath()) />

<table width="100%">
    <tr>
        <td align="center">

<cfform name="ecaform" action="ecagenerator.cfm" enctype="multipart/form-data">
<table style="font-family: arial; font-size: 9pt">
    <tr><td height="30px" align="center" colspan="2" style="background-color: #020058; color: #FFFFFF; font-family: arial;">
            <b>ECA Newsletter Creation Form</b>
        </td>
    </tr>
    <tr><td height="20"></td></tr>
    <tr>
        <td>Earned from:</td>
        <td>
            <cfinput
                    type="radio"
                    name="earnedfrom"
                    value="UC">
            UC
            <cfinput
                    type="radio"
                    name="earnedfrom"
                    value="ECA">
            ECA
        </td>
    </tr>
    <tr>
        <td>First Name:</td>
        <td>
            <cfinput
                    name="firstname">
        </td>
    </tr>
    <tr>
        <td>Last Name:</td>
        <td>
            <cfinput
                    name="lastname">
        </td>
    </tr>
    <tr>
        <td>Instructor's Name:</td>
        <td>
            <cfinput
                    name="instructorname">
        </td>
    </tr>
    <tr>
        <td>Date (MM/DD/YYYY):</td>
        <td>
            <cfinput
                    name="date">
        </td>
    </tr>
    <tr>
        <td>Sex:</td>
        <td>
            <cfinput
                    type="radio"
                    name="sex"
                    value="male">
            Male
            <cfinput
                    type="radio"
                    name="sex"
                    value="female">
            Female
        </td>
    </tr>
    <tr>
        <td>Certificate Type:</td>
        <td>
            <cfinput
                    type="radio"
                    name="certtype"
                    value="Private">
            Private
            <cfinput
                    type="radio"
                    name="certtype"
                    value="Recreational">
            Recreational
            <cfinput
                    type="radio"
                    name="certtype"
                    value="Commercial">
            Commercial
        </td>

    </tr>
</table>

<table style="font-family: arial; font-size: 9pt; margin-top: 20 px;">
    <tr>
        <td>
        Upload the photo:
        </td>
    </tr>

    <tr>
        <td>
            <cfif isDefined("form.fileUpload")>
              <cffile action="upload"
                 fileField="fileUpload"
                 destination="#strPath#"
                 accept="image/*">
                <cfimage action="resize" 
                    width="200" 
                    height="200" 
                    source="#strPath##file.serverfile#"
                    destination="#strPath##file.serverfile#"
                    overwrite="yes">                 
                <img src="<cfoutput>#file.serverfile#</cfoutput>">
            </cfif>

        </td>
    </tr>
    <tr>
        <td>
            <form enctype="multipart/form-data" 
                method="post">
            <input type="file" 
                name="fileUpload" /><br /><br />
            <input type="submit" 
                value="Submit"
                action="ecagenerator.cfm" />
            </form>
        </td>
    </tr>

</table>
<table style="margin-top: 20px;">
    <tr>
            <td>
                <cfinput
                        type="submit"
                        name="Submit"
                        value="Submit">
            </td>
        </tr>
</table>

</cfform>
        </td>
    </tr>
</table>
person PPShein    schedule 12.08.2010
comment
ppshein, спасибо за ответ. Однако эта форма, даже используя точный код, который вы сделали, по-прежнему выгружается при нажатии кнопки отправки для поля загрузки. - person Tyler; 13.08.2010

Возможно, вы захотите изучить использование <cfdiv> для раздела загрузки изображений. В основном вы хотите, чтобы форма для загрузки изображения находилась внутри <cfdiv>, чтобы форма отправлялась через ajax. Отправьте действие формы изображения в файл previewImage.cfm, который использует <cffileupload>, подтвердите с помощью isImageFile(), если это файл изображения, затем используйте <cfimage>, чтобы изменить его размер и отобразить миниатюру (можно использовать action="writetobrowser"). Думаю, самым простым способом связать загруженное изображение с родительской формой будет сохранение пути к файлу в сеансе, если вы не хотите кодировать дополнительный Javascript.

person Henry    schedule 11.08.2010