CodeIgniter - 使用动态字段生成的多个文件上载

时间:2010-12-02 16:00:40

标签: codeigniter

我使用jquery脚本动态地将新文件上传字段添加到我的表单中,因此,我的所有文件字段都是这样的

<input class="file-input-area" name="mpfile[]" type="file" size="32" value="" />

换句话说,如果我点击“添加更多文件上传”链接5次,我会得到5个文件上传字段,与上面的字段完全相同。

我对codeigniter很新,并做了一些研究,告诉我如果上传多个文件,我应该在字段名称之后使用[]我希望这是对的。

我现在的问题是确定上传文件的过程,并将其名称存储到数据库表中。

我尝试过正常的PHP上传,但它似乎无法正常工作,我不确定在我的视图,控制器和模型中放置什么。

如果有人能给我一个如何实现它的例子,那将对我有所帮助。

干杯,

1 个答案:

答案 0 :(得分:0)

使用jQuery uploadify。这些文件是异步上传的,请参阅一些演示here

这是一个实现:

jQuery('#images').uploadify({
    'uploader'  : '/uploadify/uploadify.swf',
    'script'    : '/uploadify/uploadify.php',
    'cancelImg' : '/uploadify/cancel.png',
    'folder'    : '/data/images',
    'auto'      : true,
    'fileExt'   : '*.jpg;*.gif;*.png;*.jpeg;*.tif',
    'fileDesc'  : 'Web Image Files (.JPG, .GIF, .PNG, .JPEG, .TIF)',
    'queueID'   : 'images-queue',
    'onCancel'  : function(event,ID,fileObj,data) {
     jQuery.ajax({
            type: "POST",
            url: "uploadify/delete_image.php",
            data: "filepath=/data/images/" + jQuery("#"+ID).val(),
            success: function(){
                jQuery("#"+ID).remove();
                queueSize = data.fileCount;
                jQuery('#status-message').text('Photo uploaded!');
            }
        });
   },
   'onSelect'  :function (event, ID) {
        if (queueSize < maxQueueSize)
                queueSize++;
            else{
                alert("Max number of files is " + maxQueueSize);
                jQuery('#images').uploadifyCancel(ID);
                return false;
            }       
    },
    'onSelectOnce'   : function(event,data) {
    jQuery('#status-message').text('File is currently uploaded...');
   },
   'onComplete': function (evt, queueID, fileObj, response, data) {
    jQuery('#status-message').text('H φωτογραφία φορτώθηκε!');
        jQuery("#field_photos").append("<input id="+ queueID +" type='hidden' name='pics[]' value='" + response + "' />"); //adds hidden form field
    },
    'onAllComplete'  : function(event,data) {
   },
   'onClearQueue' : function (a, b) {
        queueSize = 0;
    },
    'multi'     : true,
    'simUploadLimit' : 3,
    'removeCompleted': false,
    'sizeLimit' : 1048576,
    'queueSizeLimit' : 1
 });

这一行:

jQuery("#field_photos").append("<input id="+ queueID +" type='hidden' name='pics[]' value='" + response + "' />"); //adds hidden form field

我们将文件名存储在隐藏数组字段“pics”中。提交表单后,使用$this->input->post('pics')读取这些名称并将其存储到数据库中。