0

我构建了上传 zip 文件的功能,但是当用户上传文件两次时,它并没有删除第一个上传的文件,而是在文件名中添加了增量编号(( file.zip、file1.zip、file2.zip 等)

所以我想在用户上传相同的文件名时告诉函数删除第一个文件并上传第二个文件或替换它...任何人都帮我怎么做...

/**
 * change book source file
 * 
 * @param integer $book_id 
 */
public function upload_book_zip($book_id) {
    $vars = array();
    $vars['upload_path'] = PUBPATH . 'global/modules/bookstore/files/books_source_file/';
    $vars['allowed_types'] = 'zip';
    $vars['max_size'] = '30720';
    $vars['book_id'] = $book_id;

    $book = $this->d_book->find_by_id($book_id);
    if (isset($_POST['submit'])) {
        $file_name = $this->upload($vars);
        if ($file_name === NULL) { // error happens while uploading file
            $vars['upload_errors'] = $this->upload->display_errors("<p class='notification n-error'>", "</p>");
        } else {
            $this->d_book->update_one_field($book_id, 'bo_path_zip', $file_name);
            $this->session->set_flashdata('success_msg', lang('file_uploaded'));
            redirect('bookstore/admin_d_book/');
        }
    } else {
        $vars['upload_errors'] = NULL;
    }

    if ($book->bo_path_zip) { // load cover image
        $vars['file_path'] = base_url() . 'global/modules/bookstore/files/books_source_file/' . $book->bo_path_zip;
    } else {
        $vars['file_path'] = NULL;
    }
    $vars['controller_name'] = 'admin_d_book';
    $this->view('bookstore/admin/change_zip_file', $vars);
}

    /**
 * 
 * @param array $config the configuration array
 * @return string
 * 
 */
private function upload($config) {
    $this->load->library('upload', $config);

    if (!$this->upload->do_upload("file")) {
        return $uploadData['file_name'] = NULL;
    } else {
        $uploadData = $this->upload->data();
        log_message('debug', 'file has been uploaded ok - file name is ' . $uploadData['file_name']);
        return $uploadData['file_name'];
    }
}
4

3 回答 3

1

overwrite在您传递的配置数组中设置为 true

    $vars = array();
    $vars['upload_path'] = 'filepath here';
    $vars['allowed_types'] = 'zip';
    $vars['max_size'] = '30720';
    $vars['book_id'] = $book_id;

    // add this line
    $vars['overwrite'] = true;

    // the old file will now get overwritten
    $file_name = $this->upload($vars)
于 2012-12-11T11:45:22.360 回答
1

你可以通过添加来做到这一点

$vars['overwrite'] = TRUE;

更好地检查文件上传

于 2012-12-11T11:46:10.007 回答
0

更好的方法是检查文件的 md5 或 sha1 校验和。

如果两个用户将两个同名的不同文件上传到服务器,服务器上的文件将被覆盖,无法仅通过名称区分文件。

此外,它可以在 PHP 中轻松完成。

于 2012-12-11T13:41:14.467 回答