6

我正在尝试使用UploadiFive上传一些文件,并在上传文件时将信息添加到有关它们的数据库中。用户在表单中输入一些详细信息,然后单击上传,此时文件被上传,表单中的信息以相应的文件名添加到数据库中。

我已经可以上传文件了,但是每次文件上传完成时我都需要发布表格。它正在发布表单,但我正在努力从上传的文件中获取文件名。下面的代码:

HTML 页面:

<?php echo form_open_multipart('upload/do_upload', 'id="upload_form" name="upload_form"');?>
    <div id="queue"></div>
    <input id="file_upload" name="file_upload" type="file" multiple="true">
    <div id="target"></div>
</form>

<script type="text/javascript">
    <?php $timestamp = time();?>
    $(function() {
        $('#file_upload').uploadifive({
            'auto'             : true,
            'checkScript'      : '<? echo base_url();?>uploadify/check-exists.php',
            'formData'         : {
                                   'timestamp' : '<?php echo $timestamp;?>',
                                   'token'     : '<?php echo md5('unique_salt' . $timestamp);?>'
                                 },
            'queueID'          : 'queue',
            'onError'          : function(errorType) {
                                    alert('The error was: ' + errorType);
                                },

            'uploadScript'     : '<? echo base_url();?>uploadify/uploadifive.php',
            'onUploadComplete' : function (event, queueID, fileObj, response, data, file) {

                //Post response back to controller
                $.post('<?php echo site_url('upload/do_upload');?>', {
                    field1: $("#field1").val(),
                    field2: $("#field2").val(),
                    field3: $("#field3").val(),
                    field4: $("#field4").val(),
                    checkbox1: $("#checkbox1:checked").val(),
                    field5: $("#field5").val(),
                    filearray : response},
                    function(info){
                $("#target").append(info);  //Add response returned by controller
                });
            }
        });
    });
</script>

然后我的控制器:

//Decode JSON returned
$file = $this->input->post('filearray');
$json_decoded = json_decode($file);

// Get the image filename & full filename with path
$image_file = $json_decoded->{'file_name'};
$path = "assets/photos/highres/".$image_file;

echo "IMAGE FILE NAME: " . $image_file; die;

出于调试目的,我只是做了一个$image_file.

uploadifive.php除了脚本的响应之外,它似乎正在提交所有内容。当我使用 Firebug 时,我可以看到我确实收到了响应,而且看起来是正确的,但是响应 ( filearray) 没有发布到要解码的表单上。

关于为什么我无法filename从回复中得到任何想法?

4

1 回答 1

1

TL;博士

用于event.name_onUploadComplete:function(event,data){}

如果您真的需要服务器的响应,那么您可能想要使用data(不幸的是,我无法测试它,但文档不会说谎,不是吗?)。

细节

的文档onUploadComplete告诉我们以下内容:

上传完成

输入类型
函数

可覆盖 不
适用

每个文件上传完成时触发一次。论据

  • file
    上传的文件对象
  • data
    服务器端上传脚本返回的数据(在uploadifive.php中回显)

演示

$(function() {
    $('#file_upload').uploadifive({
        'uploadScript'     : '/uploadifive.php'
        'onUploadComplete' : function(file, data) {
            alert('The file ' + file.name + ' uploaded successfully.');
        }
    });
});

这与您的代码中的内容完全不同:

'onUploadComplete' : function (event, queueID, fileObj, response, data, file) {...}

我无法测试UploadiFive,但做了一个快速检查Uploadify

'onUploadComplete' : function(event) {
    console.log(JSON.stringify(event,null,4));
}

它返回了这个输出:

{
    "size": 34405,
    "post": {},
    "modificationdate": "2015-09-21T02:24:51.597Z",
    "name": "Tire-wheel-advisor1.jpg",
    "creationdate": "2015-09-21T02:24:51.539Z",
    "id": "SWFUpload_0_0",
    "type": ".jpg",
    "filestatus": -4,
    "index": 0
}
于 2015-09-29T02:34:21.140 回答