在.ajax调用的页面上使用$ _FILES

时间:2012-12-13 23:02:29

标签: php ajax file session

我正在使用两个.php页面。 Index.php有一个文件上传表单,回发到index.php。提交表单后,我可以在index.php上访问$ _FILES没问题。

我的问题是我希望(在表单提交和页面加载之后)使用.ajax(jQuery)调用另一个.php文件,以便该文件可以打开并处理某些行并将结果返回给ajax。然后,ajax显示结果并递归调用自身来处理下一批行。

基本上我想以块的形式处理(放入数据库等)csv并在块之间为用户显示它。我是这样做的,因为文件是400,000多行,并且用户不想等待10+分钟才能处理它们。

我不想移动这个文件(保存它),因为我只需要处理它并扔掉它,如果用户关闭页面,而处理文件时不会丢弃它。我可以写cron脚本,但我不想。

我真正想做的是通过.ajax传递(单个)$ _FILES或将其保存在$ _POST或$ _SESSION中以在第二页上使用。

我的事业有希望吗?

如果有帮助的话,可以使用ajax代码:

    function processCSV(startIndex, length)
    {
        $.ajax({ 
            url: "ajax-targets/process-csv.php", 
            dataType: "json",
            type: "POST",
            data: { startIndex: startIndex, length: length },
            timeout: 60000, // 1000 = 1 sec
            success: function(data) {
                // JQuery to display the rows from the CSV

                var newStart = startIndex+length;
                if(newStart <= data['csvNumRows']) {
                    processCSV(newStart, length);
                }
            }
        });
    }
    processCSV(1, 2);
});

P.S。我确实试过这个Passing $_FILES or $_POST to a new page with PHP,但它不适合我:( SOS。

澄清:我的问题是我想在ajax调用的页面上访问$ _FILE。该文件上传到index.php,表单为action =“#”,因此它会发布到index.php。 post post.php发送一个ajax调用process-csv.php后,我需要在process-csv.php上访问该文件。我不想移动文件,因为我不想清理旧文件。

2 个答案:

答案 0 :(得分:1)

所以我认为你没有说过你的问题,但我猜你的问题是你无法找到一个文件。原因是因为您无法在javascript中获取文件信息,因为它存在安全风险。虽然有很多方法可以做到这一点。你可以使用flash或iframe伪造像文件上传这样的ajax。

jQuery iframe file upload

我实际上喜欢flash版本,因为它让你能够同时上传多个文件,并且仍然可以提供iframe所做的一切以及更多的活动。

http://code.google.com/p/swfupload/

使用uploadComplete,您可以使用然后将您的处理代码和uploadStart用于传递标记,以便将此会话与添加到数据库的文件相关联。

同样在你的处理中,确保你总是传递你已经走了多远,所以它不会每次都返回相同的行。

我希望有所帮助。

答案 1 :(得分:1)

只需在JavaScript中构建数据行:

data: { 
    startIndex: startIndex, 
    length: length, 
    rows: variableWithRows.slice(startIndex, startIndex + length)
},

在PHP内部,所有行都在$_POST['rows']中作为数组数据。