簡體   English   中英

從UploadiFive向Codeigniter控制器發送數據

[英]Sending data to Codeigniter controller from UploadiFive

我正在嘗試使用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任何想法?

TL; DR

onUploadComplete:function(event,data){}使用event.name onUploadComplete:function(event,data){}

如果你真的需要服務器的響應,那么你可能想要使用data (不幸的是,我無法測試它,但文檔不會說謊,是嗎?)。

細節

onUploadComplete的文檔告訴我們以下內容:

onUploadComplete

輸入類型
功能

重寫
N / A

對於完成的每個文件上載,觸發一次。 參數

  • 文件
    上載的文件對象
  • 數據
    從服務器端上傳腳本返回的數據(在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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM