2012-04-19 213 views
0

我有一個表單,用戶選擇一個文件,在文本框中輸入一個文件名,然後點擊保存,它應該將文件保存在服務器上。上傳文件時遇到問題

我希望它的工作方式是,它:

1)在數據庫中插入一行。 2)保存文件的名稱是db的row_id。 (ex.38.pdf) 3)用文件擴展名更新數據庫。

我無法弄清楚如何安排我的代碼,以便發生。我可以得到插入的行,但爲了設置file_name(名稱文件保存)我需要有擴展名。只有獲得擴展名的方法是加載一個庫。爲了加載庫我需要$ config數組(其中之一是file_name)設置。

非常困惑。可能很明顯,但也許我一直在盯着它。感謝您的幫助和好運。順便說一句,使用codeigniter框架。

(。截至目前,該代碼被打破,我一直用它搞亂了大約一個小時,一個半這正是我最近嘗試過),該形式是針對

上傳功能 - --------

public function do_upload() { 
    $fileName = $this->input->post('name'); 
    $scopeId = $this->session->userdata('scopeId'); 
    $user = 'user'; 

    $date = date('n/d/Y', time()); 
    $query = $this->db->query(' 
     INSERT 
     INTO scope_uploads 
     VALUES(
      NULL, 
      '. $scopeId .', 
      "'. $fileName .'", 
      "'. $user .'", 
      "'. $date .'", 
      "N/A" 
     ) 
    '); 

    $lastId = $this->db->insert_id(); 

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

    $fileData = $this->upload->data(); 
    $fileExt = $fileData['file_ext']; 

    $config['upload_path'] = './uploads/';  
    $config['allowed_types'] = 'gif|jpg|pdf';  
    $config['file_name'] = ''. $lastId .'.'. $fileExt .''; 
    $config['max_size'] = '1000'; 
    $config['max_width'] = '1024'; 
    $config['max_height'] = '768'; 

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

    $query2 = $this->db->query(' 
     UPDATE scope_uploads 
     SET extension = "'. $fileExt .'" 
     WHERE id = '. $lastId .' 
    '); 

    $error = ''; 

    if (!$this->upload->do_upload('userfile')) { 
     $error = array('error' => $this->upload->display_errors()); 
     echo 'error'; 
    } else { 
     $data = array('upload_data' => $this->upload->data());   
    } 

    if ($error == '') { 
     redirect(site_url('headquarters/scopeSummary')); 
    } else if ($error !== '') { 
     $deleteLastRow = $this->db->query(' 
      DELETE 
      FROM scope_uploads 
      WHERE id = '. $query->insert_id() .' 
     '); 
    } 

    print_r($error); 
} 
+0

你使用什麼框架???? – Baba 2012-04-19 22:18:59

+0

codeigniter。我會把它放在那裏 – 2012-04-19 22:24:51

回答

-1

感謝您的幫助。讀取codeigniter文檔時,我認爲在重命名上傳文件時必須包含擴展名。事實證明,我沒有。知道了一切。

+0

明天之前不能接受這個答案。 :( – 2012-04-20 21:19:21

0

我不會解釋任何代碼,因爲你只需要對代碼進行一些更改。

  1. 文件名採取的形式輸入(例如:名字=「文件名」)
  2. 形式上傳
  3. 如果提交按鈕被採用,您必須上傳文件第一
  4. 檢查文件上傳成功與否是
  5. 如果成功以「文件名」重命名爲+從上傳動作
  6. 保存「文件名」數據庫MIME類型
  7. 如果上傳失敗,轉到錯誤消息,並且「文件名」無線不會插入到數據庫中
0

你不想要文件擴展名,你想要的MIME類型。任何人都可以上傳一個以.jpg結尾的文件,但這並不意味着它不是一些知道其中的文本文件。

要獲得mime類型,您應該使用可能需要安裝的FINFO庫。

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$mime_type = finfo_file($finfo, $_FILES['userfile']['tmp_name']); 
finfo_close($finfo); 

現在看起來你已經做了一些工作,以抽象上傳的文件,所以你要採取以上,並與相應的完整路徑名上傳文件替換全局變量。

+0

我不想要文件擴展名,因爲我需要能夠鏈接到它 – 2012-04-20 20:03:44

+0

如果是這樣的話,爲什麼你需要將擴展​​名與文件名分開?難道你不能保存全名,包括擴展名嗎?一些操作系統甚至不使用文件擴展名,而只是查看幻數或其他元數據來確定文件類型。 – Anthony 2012-04-20 20:30:27