关于javascript:Coldfusion Ajax多文件上传 – CFFile覆盖ServerFile

Coldfusion Ajax Multi-File Upload - CFFile Overwriting ServerFile

我已经从这个问题中获取了一些代码用于多文件上传,它工作正常,但是cffile覆盖cffile.serverFile所以在parm转储中,我得到的唯一文件名是它上传的最后一个,而不是 他们都是。

我尝试循环它,每次附加一个数组,但仍然是同样的问题。 似乎cffile正在上传一次性选择的所有文件。 在这个问题中,OP说他用正确的数据做了一个JSON响应,但是我不知道怎么做,因为我无论如何也无法取回所有的名字。

呼叫者:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    $(document).ready(function() {
        $('#multiFileFrm').submit(function(event){
            event.preventDefault();
            $.each($('#multiFile')[0].files, function(i, file) {
                var formData = new FormData();
                formData.append('file-0', file);
                ajaxUpload(formData);
            });
        });
        function ajaxUpload(formData) {
            console.log("ajaxUpload function called");
            $.ajax({
                type: 'POST',
                url:"ajax/AJAX_multiUploadTest.cfm",
                data: formData,
                cache: false,
                contentType: false,
                processData: false,
                success: function(data) {
                    $('#callback').html(data);
                },
                error: function(data) {
                    console.log(data);
                }
            });
        }
    });


<form method="post" enctype="multipart/form-data" id="multiFileFrm">
    <input type="file" name="multiFile" id="multiFile" multiple="multiple" />
    <input type="submit" id="submitFrm" value="Submit" />
</form>

AJAX_multiUploadTest.cfm:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<cftry>
<cfobject component="code/profile" name="pro">
<cfset parm={}>
<cfset parm.userID=session.visitor.user.ID>
<cfset parm.database=application.datasource>
<cfset parm.form=form>

<cfset path="#application.directory#/data/dev/">
<cfif NOT DirectoryExists(path)><cfdirectory action="create" directory="#path#"></cfif>

<cffile action="upload" filefield="file-0" destination="#path#" nameConflict="makeUnique">
<cfset upload="#application.directory#/data/dev/#cffile.serverfile#">

<cfdump var="#parm#" label="parm" expand="no">
<cfcatch type="any">
    <cfdump var="#cfcatch#" label="cfcatch" expand="no">
</cfcatch>
</cftry>


哇,通过阅读我自己的帖子,我已经找到了问题。 回调文件在JavaScript循环中调用,因此每次都会覆盖变量。 为了存储所有文件名,我只是将它们存储在会话变量中:

1
<cfset arrayAppend(session.visitor.user.tempData,"#application.domain#data/dev/#cffile.serverfile#")>

然后输出所有上传的文件,一旦被其他函数处理,也许将它存储在数据库中,你就可以清空数组了!

希望这有助于某人:)