Загрузить файл в объект - PullRequest
1 голос
/ 05 января 2012

Что я делаю не так?

fileUpload.cfm

<cfcomponent name="fileAttachment" hint="This is the File Attachment Object">

    <cffunction name="uploadFile" access="public" output="no" returntype="string">
        <cfargument name="fileToUpload" type="string" required="no">
        <cfargument name="pDsn" required="no" type="string">
        <cfset var cffile = "">
        <cffile action="upload" destination="D:\apache\htdocs\abc\uploads" filefield="#ARGUMENTS.fileToUpload#" nameconflict="makeunique">
        <cfreturn cffile.clientFile />
    </cffunction>

</cfcomponent>

test_fileUpload.cfm

<form action="fileUpload.cfm" enctype="multipart/form-data" method="post">
    <input type="file" name="fileToUpload"><br/>
    <input type="submit">
</form>

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Эта строка:

<cffile action="upload" destination="D:\apache\htdocs\abc\uploads" filefield="#ARGUMENTS.fileToUpload#" nameconflict="makeunique">

Атрибуту filefield требуется имя поля формы , которое будет содержать загруженный файл.Вы на правильном пути, но, к сожалению, в настоящее время значение #ARGUMENTS.fileToUpload# не в том, что, исходя из вашей конструкции, оно содержит ссылку на сам фактический файл.введите в форму:

<input type="hidden" name="nameOfField" value="fileToUpload">

Затем передайте FORM.nameOfField в метод uploadFile () в качестве первого параметра.CFFILE позаботится обо всем остальном.

0 голосов
/ 05 января 2012

Ну, я обнаружил много проблем с этим кодом.

  1. fileupload.cfm должен быть файлом fileupload компонента. cfc , поскольку вы пишете в нем компонент.
  2. Поскольку вы собираетесь вызывать метод загрузки напрямую из формы, тип доступа к вызову должен быть REMOTE .
  3. страница действия должна измениться на fileupload.cfc? Method = uploadFile
  4. если вы определяете cffile как локальную переменную компонента, вам нужно указать атрибут result = "cffile" в теге cffile.
  5. Атрибут filefield принимает имя поля формы, а не его значение, поэтому просто удалите тег ## ииспользуйте fileToUpload.

Ниже приведен правильный код. fileupload.cfc

<cffunction name="uploadFile" access="remote" output="no" returntype="string">
    <cfargument name="fileToUpload" type="string" required="no">
    <cfargument name="pDsn" required="no" type="string">
    <cfset var cffile = "">
    <cffile action="upload" destination="D:\apache\htdocs\abc\uploads" filefield="fileToUpload" result="cffile" nameconflict="makeunique">
    <cfreturn cffile.clientFile />
</cffunction>

</cfcomponent>

test_fileupload.cfm

`<form action="fileupload.cfc?method=uploadFile" enctype="multipart/form-data" method="post">
   <input type="file" name="fileToUpload"><br/>
   <input type="submit">   </form>`
...