上传文件时遇到问题

问题描述:

我有一个表单,用户选择一个文件,在文本框中输入一个文件名,然后点击保存,它应该将文件保存在服务器上。上传文件时遇到问题

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

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

感谢您的帮助。读取codeigniter文档时,我认为在重命名上传文件时必须包含扩展名。事实证明,我没有。知道了一切。

+0

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

我不会解释任何代码,因为你只需要对代码进行一些更改。

  1. 文件名采取的形式输入(例如:名字=“文件名”)
  2. 形式上传
  3. 如果提交按钮被采用,您必须上传文件第一
  4. 检查文件上传成功与否是
  5. 如果成功以“文件名”重命名为+从上传动作
  6. 保存“文件名”数据库MIME类型
  7. 如果上传失败,转到错误消息,并且“文件名”无线不会插入到数据库中

你不想要文件扩展名,你想要的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

有CI中的form_validation库插件的MIME类型:http://codeigniter.com/forums/viewthread/123816/

我用它在我的项目,而且运作非常良好。