使用ajax在codeigniter中上传图片

Posted

技术标签:

【中文标题】使用ajax在codeigniter中上传图片【英文标题】:upload image in codeigniter using ajax 【发布时间】:2012-03-25 18:54:18 【问题描述】:

我在上传一些图片时遇到问题。所以...我有管理员端,我在其中单击“添加图像”按钮并开始添加图像。当我开始添加它们时,没有显示图像,以便我可以看到它。当我点击保存时,图像应该保存到某个位置。我的问题是:为什么我点击添加图片按钮后看不到我的图片?为什么图片没有保存在我指定的路径中? 非常感谢! 我还在这里添加了一些代码: 这是在我的控制器中:

public function showcase_image()
    try
                $config['upload_path'] = './resources/media/showcase/image/';
        $config['allowed_types'] = 'jpeg|png|jpg|flv|mp3|wav';
        $config['max_size'] = '10000';

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

        $this->upload->do_upload('add_image');
        $data = $this->upload->data();

        $w = 720;
        $h = 425;

        $this->load->library('image_lib');
        $config['image_library'] = 'gd2';
        $config['source_image'] = $data['full_path'];
        $config['create_thumb'] = TRUE;
        $config['maintain_ratio'] = TRUE;
        $config['thumb_marker'] = '';
        $config['width'] = $w;
        $config['height'] = $h;


        $this->image_lib->initialize($config); 
        if($data['image_width']<425 && $data['image_height']<425)
        else
            $this->image_lib->resize();
        
        $file = $data['file_name'];

        echo json_encode(array("error"=>false,"msg"=>"success","file"=>$file,"dir"=>"image"));
    catch(Exception $e) 
        echo json_encode(array("error"=>true,"msg"=>$e->getMessage()));
    

这是在我的模型中:

公共函数 getShowcases()
        $query = $this->db->query("SELECT * FROM show ORDER BY show_id DESC");
        $result = $query->result();
        返回$结果;
    

    公共函数 getImagesShowcase($idShowcase)
        $query = $this->db->query("SELECT * FROM show_gallery WHERE show_gallery_project_id='".$idShowcase."' AND Showcase_gallery_type='image' ORDER BY show_gallery_index ASC");
        $result = $query->result();
        返回$结果;
    

在视图方面我有一些 ajax:

 函数 ajaxFileUploadImage()
    $("#loading")
        .ajaxStart(函数()
            $(this).show();
        )
        .ajaxComplete(函数()
            $(this).hide();
        );
    $.ajax文件上传
    (
        
            url:'=site_url('ajaxadmin/showcase_image')?>',
            安全URI:假,
            fileElementId:'add_image',
            数据类型:'json',
            数据:,
            成功:功能(数据,状态)
            
                //jQuery('.thumb_file').attr('src','=base_url()?>resources/media/our_work/thumb/'+data.file);
                //jQuery('input[name=thumb]').val(data.file);
                变种图像='\
                 \
                     \
                         \
                     \
                    resources/media/showcase/image/'+data.file+'" style="z-index: 0; position: relative;"/> \
                     \
                         \
                         \
                     \
                     \
                 \
                ';
                jQuery('#showcase_image').append(jQuery(image));
            ,
            错误:函数(数据,状态,e)
                jQuery('.response_mes').html('* 请稍后再试!');
            
        
    )
    返回假;

我希望这段代码会很有用,如果有人有灵魂,也许会很棒。:D

【问题讨论】:

【参考方案1】:

如何使用 ajax 上传图片的示例。我想这会对你有所帮助。

<script type="text/javascript">
		$(document).ready(function()
			$("#upfile1").click(function () 
    $("#file1").trigger('click');
		);

		var input = document.querySelector('input[type=file]'); 
		input.onchange = function () 
		var file_data = $("#file1").prop("files")[0]; // Getting the properties of file from file field
  	var form_data = new FormData(); // Creating object of FormData class  	
  	form_data.append("file", file_data)
		 var filevalue = $("#file1").val();
		 console.log(form_data);

    $.ajax(
    		url:'index.php/welcome/uploadImage',
    		type:'POST',
    		data : form_data,
    		cache: false,
        contentType: false,
        processData: false,
    		success:function( data )
    		
    			console.log(data);
    		,
    		error:function( error )
    			console.log(error);
    		
    );	
  	
);

<input type="file" id="file1" name="image" value=""  accept="image/*" capture style="display:none"/>
<img src="http://macgroup.org/blog/wp-content/uploads/2011/10/iphone-camera-icon-150x150.jpg" id="upfile1" style="cursor:pointer" />

【讨论】:

【参考方案2】:

我假设您正在使用 here 找到的 jQuery AjaxFileUpload 插件,该插件使用“iFrame”上传技巧。如果浏览器支持,您应该尝试使用来自 valums 的qqFileUploader 进行上传,如果浏览器支持它,则使用 iFrame 进行上传,并在必要时回退到 iFrame。我相信这是通过 AJAX 上传的一种更好的方式,并且会更容易实现。

【讨论】:

但是使用 ajaxfileupload 我不能解决这个问题吗?问题是,在我必须上传项目的一部分中,它运行良好,而当我尝试加载照片以进行展示时,它却没有。我尝试将代码从一个部分复制到另一个部分,但得到了相同的结果 我同意你应该能够使用你现有的代码库让它工作。您是否检查了进入 CodeIgniter 的 $_POST 数组的内容,以确保所有文件上传细节都是正确的?

以上是关于使用ajax在codeigniter中上传图片的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 图片上传使用 jquery 和 ajax 错误 [重复]

CodeIgniter 中的 Ajax 上传返回“您没有选择要上传的文件”

无法在 codeigniter 中上传图片,路径错误

CodeIgniter AJAX文件上传,上传时$_FILE为空

使用 CodeIgniter 上传多张图片

Codeigniter 上传图片 - 上传路径似乎无效