簡體   English   中英

將上傳的文件數據存儲到數組中

[英]Store uploaded file data into array

我有以下情況:當用戶單擊時,我需要一次上傳3個文件。 我認為有以下代碼:

<?php echo form_open_multipart('uploads/do_upload', 'class="dropzone", id="dropzone-prod", data-nextFormExecDropzone="#dropzone-promo"');?>
   <div class="fallback">
     <input type="file" name="userfile" size="20" />
   </div>
</form>
<?php echo form_open_multipart('uploads/do_upload', 'class="dropzone", id="dropzone-promo", data-nextFormExecDropzone="#dropzone-plan"');?>
   <div class="fallback">
     <input type="file" name="userfile" size="20" />
   </div>
</form>
<?php echo form_open_multipart('uploads/do_upload', 'class="dropzone", id="dropzone-plan"');?>
   <div class="fallback">
     <input type="file" name="userfile" size="20" />
   </div>
</form>
<div class="col-lg-4">
    <button id="processQueue"  class="btn btn-primary" type="button"><i class="fa fa-upload"></i>Start Upload</button>
</div>

當用戶單擊按鈕時,我有一個javascript代碼,可以將每種形式發送給我的順序。 在我的控制器中,我具有以下方法(do_upload()):

function do_upload() {
    //$filePath = $this->config->item('base_current_upload_url');
    $filePath = APPPATH.'UPLOADS/';
    $filePathAfterUploaded = $this->config->item('base_uploaded_url');

    $config['upload_path'] = $filePath;
    $config['allowed_types'] = '*';
    $config['max_size'] = 1024 * 100;

    $this->load->library('upload', $config);

    //$this->load->library('csvreader');
    //$filePathAfterUploaded = $this->config->item('base_uploaded_url');
    //print_r($filePath); die();
    $basefilepath = APPPATH.'UPLOADS/';
    $this->load->model('uploads_m');

    if ( ! $this->upload->do_upload('file')) {
        $error = array('error' => $this->upload->display_errors());

        print_r($error);
    }
    else {
        $data = array('upload_data' => $this->upload->data());
        print_r($data); die();
    }

}

問題:

我需要上傳3個文件。 如果只缺少一個,我將無法繼續。 這樣,在每個文件的上載過程中都會調用do_upload函數,因此我需要找到一種方法來識別3個文件已被上載。 (在那之后,我將使用mysql'load data infile'將這些文件中的數據加載到某些表中,但是只有在這三個文件都已上傳的情況下,我才能這樣做。您能幫我找到一種處理這種情況的方法嗎?

每次調用do_uplaod時$ data的結構是這樣的:

Array
(
[upload_data] => Array
    (
        [file_name] => PROMOWEB111120131.txt
        [file_type] => text/plain
        [file_path] => C:/Program Files/EasyPHP-DevServer-13.1VC9/data/localweb/projects/integration/www/application/UPLOADS/
        [full_path] => C:/Program Files/EasyPHP-DevServer-13.1VC9/data/localweb/projects/integration/www/application/UPLOADS/PROMOWEB111120131.txt
        [raw_name] => PROMOWEB111120131
        [orig_name] => PROMOWEB11112013.txt
        [client_name] => PROMOWEB11112013.txt
        [file_ext] => .txt
        [file_size] => 2.67
        [is_image] => 
        [image_width] => 
        [image_height] => 
        [image_type] => 
        [image_size_str] => 
    )

)

如果do_upload是一個獨立函數,則引入一個靜態變量來計算調用次數。

function do_upload () {
    static $count = 0;
    // The rest of your function goes here
    if (no_errors_occurred) {
        static::$count++;
    }
    if ($count == 3) {
        // This function has been called 3 times; trigger something here
    }
}

更好的是,如果它在課堂上...

class MyClass {
    protected static $data = array ();

    // Other functions and properties

    public function do_upload () {
        // The rest of your function
        if (no_errors_occurred) {
            static::$data[] = array (
                'upload_data' => array (
                    'file_name' => ...,
                    // Populate the data array
                )
            );
        }
        $this->do_mysql_load_data_infile();
    }

    protected function do_mysql_load_data_infile () {
        if (count(static::$data) != 3) {
            return false;
        }
        // Do MySQL load data infile
        // Get information about file uploads by accessing the static::$data array
        foreach (static::$data as $file) {
            echo $file['upload_data']['file_name'];
        }
    }
}

暫無
暫無

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

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