Php 使用Codeigniter';带Uploadify的s上载库(Uploadifyve)

Php 使用Codeigniter';带Uploadify的s上载库(Uploadifyve),php,ajax,codeigniter,jquery,uploadify,Php,Ajax,Codeigniter,Jquery,Uploadify,我有一个“文档”上传表单,通过正常的Codeigniterupload运行。但是,我需要将其作为Ajax调用使用。我有一个上传的脚本(我买的),这是他们的HTML5版 我的问题是,无法让上传的jqueryajax插件与我的控制器功能一起工作。没有控制台错误、CI错误和从ajax函数输出的错误。事实上,Uploadify函数似乎没有起作用,因为页面重定向到我的控制器函数并返回$error=array('error'=>$this->upload->display_errors())错误 有没有人有

我有一个“文档”上传表单,通过正常的Codeigniter
upload
运行。但是,我需要将其作为Ajax调用使用。我有一个上传的脚本(我买的),这是他们的HTML5版

我的问题是,无法让上传的jqueryajax插件与我的控制器功能一起工作。没有控制台错误、CI错误和从ajax函数输出的错误。事实上,Uploadify函数似乎没有起作用,因为页面重定向到我的控制器函数并返回
$error=array('error'=>$this->upload->display_errors())错误

有没有人有将Uploadifive与Codeigniter结合的经验?我的代码有什么特别之处吗

请注意,我正在加载所有正确的脚本、库、模型等。此外,尚未编写表单验证代码。同样,没有Uploadify插件,一切都可以正常工作

控制器功能(即上传/添加文档):

function add_document() {

    if (!$this->upload->do_upload()) {

        // If file upload failed or is invalid, 
        // display error notification
        $error = array('error' => $this->upload->display_errors());
        $this->load->view('upload', $error);
    }       
    else {

        // If file upload was successful,
        // get 'file_name' of the uploaded document
        $file_uploaded = $this->upload->data();
        $file_name = $file_uploaded['file_name'];

        // Add document to S3
        $query = $this->s3_model->add_document($file_name);
        if($query) {           

            // If successful, return S3 file url 
            $document_url = $query;

            // Add document and form details to db
            $this->content_model->add_doc($document_url);

            // Delete temporary document from local 'uploads' folder
            unlink('uploads/'.$file_name);
        }                   

        $this->load->view('upload');
    }

}
<? echo form_open_multipart('upload/add_document', 'id="upload-doc-form"') ;?>
    <? echo form_input('title', '', 'placeholder="Title"') ;?><br/>
    <? echo form_textarea('description', '', 'placeholder="Description"') ;?><br/>
    <? echo form_input('company',  '', 'placeholder="Company"') ;?><br/>
    <? echo form_input('company_url', '', 'placeholder="Company URL"') ;?><br/>
    <? echo form_upload('userfile', '', 'id="file-upload"') ;?>
    <br/><br/>
    <? echo form_submit('', 'Upload', 'class="doc-submit"') ;?>
<? echo form_close() ;?>
表格:

function add_document() {

    if (!$this->upload->do_upload()) {

        // If file upload failed or is invalid, 
        // display error notification
        $error = array('error' => $this->upload->display_errors());
        $this->load->view('upload', $error);
    }       
    else {

        // If file upload was successful,
        // get 'file_name' of the uploaded document
        $file_uploaded = $this->upload->data();
        $file_name = $file_uploaded['file_name'];

        // Add document to S3
        $query = $this->s3_model->add_document($file_name);
        if($query) {           

            // If successful, return S3 file url 
            $document_url = $query;

            // Add document and form details to db
            $this->content_model->add_doc($document_url);

            // Delete temporary document from local 'uploads' folder
            unlink('uploads/'.$file_name);
        }                   

        $this->load->view('upload');
    }

}
<? echo form_open_multipart('upload/add_document', 'id="upload-doc-form"') ;?>
    <? echo form_input('title', '', 'placeholder="Title"') ;?><br/>
    <? echo form_textarea('description', '', 'placeholder="Description"') ;?><br/>
    <? echo form_input('company',  '', 'placeholder="Company"') ;?><br/>
    <? echo form_input('company_url', '', 'placeholder="Company URL"') ;?><br/>
    <? echo form_upload('userfile', '', 'id="file-upload"') ;?>
    <br/><br/>
    <? echo form_submit('', 'Upload', 'class="doc-submit"') ;?>
<? echo form_close() ;?>
这里是Uploadify附带的默认的打包服务器端脚本,我也没有提到它(obvs)。这只是向您展示Uploadify如何处理数据。我用的是控制器,我想这就是问题所在

<?php
/*
UploadiFive
Copyright (c) 2012 Reactive Apps, Ronnie Garcia
*/

// Set the uplaod directory
$uploadDir = '/uploads/';

// Set the allowed file extensions
$fileTypes = array('jpg', 'jpeg', 'gif', 'png'); // Allowed file extensions

$verifyToken = md5('unique_salt' . $_POST['timestamp']);

if (!empty($_FILES) && $_POST['token'] == $verifyToken) {
    $tempFile   = $_FILES['Filedata']['tmp_name'];
    $uploadDir  = $_SERVER['DOCUMENT_ROOT'] . $uploadDir;
    $targetFile = $uploadDir . $_FILES['Filedata']['name'];

    // Validate the filetype
    $fileParts = pathinfo($_FILES['Filedata']['name']);
    if (in_array(strtolower($fileParts['extension']), $fileTypes)) {

        // Save the file
        move_uploaded_file($tempFile, $targetFile);
        echo 1;

    } else {

        // The file type wasn't allowed
        echo 'Invalid file type.';

    }
}
?>

您是否尝试将选项
uploadScript
设置为
$(this).attr('action')
或者

问题在于我没有设置(或更改)从Ajax调用发送到控制器的文件对象名。Codeigniter的
UPLOAD
库查找名为
userfile
的文件对象。默认情况下,Uploadifive发送数据字符串,
fileData

非常简单的编辑-我应该抓到的东西

在Uploadifive Alax函数中,我必须重命名
fileObjName
以与CI上载库一致。像这样:

$(function() {
    $('#file-upload').uploadifive({
        'fileObjName': 'userfile',
        ...
    });
}); 

没有进行ajax调用吗?您是否100%确定form.attr('action')是正确的?在var表单行之后发出警报以进行检查。您是否100%确定页面加载时(在尝试上载之前)没有JS错误?
uploadScript
src呈现良好,根据我的浏览器来源。我猜是控制器代码。没有控制台错误…警报正常,等等。这是Codeigniter
上载库的服务器端问题,我确定。更新了我的问题,以包括与Uploadifive打包的默认服务器端脚本。我必须错误地处理从ajax调用到控制器的数据。请尝试$this->upload->do_upload('userfile');非常确定CI上载脚本默认查找“userfile”,没有?我已经尝试过了…
uploadScript
src呈现良好,根据我的浏览器源代码。我猜是控制器代码。手动运行控制器时会发生什么?你看过你得到的数据了吗?e、 g.
echo.“打印请求($)”;退出
并且
uploadifive
-函数在
$(function(){}
中而不是在
$(document)中是否正确。ready(function(){})
这意味着相同的事情(re:document ready);)。是的,包含的UploadifivePHP脚本在直接调用时运行良好。但是我想在codeigniters库中使用它。你可以使用upload类来选择你想要的上传名称,例如if(!$this->upload->do_upload('fileData')){非常确定为了使用CI upload lib,您必须将文件设置为
userfile
,否?除非您更改
system/libraries/upload.php
文件…system->upload.php文件的第143行,
公共函数do_upload($field='userfile'))
“userfile”是您上面提到的默认上载名称,您可以只写$this->upload->do_upload(),而不是$this->upload->do_upload('userfile')。如果您想更改上载名称或运行多个上载,例如,您可以指定所需的上载名称。