0

我正在使用 MongoDB 和 Codeigniter 构建一个网站,用户可以在其中创建文章(标题 + 文本)并在它之后(但在提交之前)上传一些图片(图片不在文本中)。

我想我会使用 jquery.upload 。但是我的问题是如何在图片和文章之间做链接(因为会先上传img),如何重命名它们?有什么好的方法吗?

4

3 回答 3

0

虽然我从未尝试过此功能,但这是一个突然出现在我脑海中的假设解决方案:

在您的创建文章页面上创建一个唯一的字符串,并将其作为隐藏字段插入到您的文档中。6 个字符的随机字符串或其他内容可能就足够了。

上传图像时,使用该字符串作为图像所属的未来帖子的标识符。在文件名、路径、数据库条目或对您的方案有用的任何内容中使用字符串。

当文章本身被提交时,唯一的字符串将允许它与图像一起被识别,并且您可以在该阶段使用任何您需要的魔法来将所有内容完全提交在一起。

请记住,您应该对上传的任何图像进行某种统计和/或垃圾收集,然后放弃相关文章。

于 2013-05-23T00:40:54.310 回答
0

在表 'articles_table' 中添加 'thumbnail' 字段。为了更简单的需要,我删除了不必要的部分。我们只会使用“标题”和“缩略图”作为字段。

查看 | 创建.php

<?php echo form_open_multipart('articles/insert'); ?>       
  Title <br>
  <?php echo form_input('title','','id="title_input"'); ?><br>
   Thumbnail<br>  
   <input type="file" name="file" size="20" />
   <?php echo form_submit('Submit',"Submit"); ?>
<?php echo form_close(); ?>

控制器 | 文章.php

function insert()
{
    //$this->articles_model->insert();
    $this->articles_model->save();
    redirect('articles/index');
}

型号 | 文章模型.php

    function save($id=0)
    {
        $title=$this->input->post('title');

                //Set the config
            $config['upload_path'] = './files/'; 
            $config['allowed_types'] = 'gif|jpg|png|PNG'; 
            $config['max_size'] = '1100';
            $config['max_width'] = '11024';
            $config['max_height'] = '1768';
            $config['overwrite'] = FALSE; 

            //Initialize
            $this->upload->initialize($config);

            //Upload file
            if( ! $this->upload->do_upload("file"))
            {
               //echo the errors
                echo $this->upload->display_errors();
            }
            //If the upload success
            $thumbnail = $this->upload->file_name;

        if($id<1)
        {
            $data=array(
                'title'=>$title,
                'thumbnail'=>$thumbnail
            );
            $this->db->insert('articles_table',$data);
        }
      }
于 2013-05-24T00:51:26.800 回答
0

jquery 上传会工作。并检查它是否成功,然后在表单中创建新的隐藏输入并根据需要设置其值。

于 2013-05-22T18:54:40.703 回答