使用Codeigniter(API)上传图像

时间:2013-12-12 15:29:13

标签: php api codeigniter

我正在尝试使用codeigniter在我的API中实现一个简单的图像上传功能。到目前为止,这是我的代码:

function addpicture_post()
{
      $config['upload_path'] = './upload/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '10000';
$config['max_width']  = '1024';
$config['max_height']  = '768';
$this->load->library('upload', $config);

if ( ! $this->upload->do_upload() )
    {
    print_r($this->upload->display_errors('', ''));
    print_r($this->upload->data());
    $info = 'not working';
    $this->response($info);
    }
}
}

当我使用apigee(https://apigee.com/console/others)尝试时,如果我没有设置任何参数,我会收到以下消息:

HTTP / 1.1 200好的 状态: 200 日期: 2013年12月12日星期四格林威治标准时间15:30:16 内容长度: 367 活着: 超时= 15,最大= 100 内容类型: 应用程序/ JSON X-已启动方式: PHP / 5.3.5-1ubuntu7.11 服务器: Apache / 2.2.17(Ubuntu)

您没有选择要上传的文件。

到目前为止一切顺利。但是当我尝试上传一个图像文件(文件attachement参数在远地点,我命名为“userfile”)时,我有以下回复:

测试网址无效

我现在相当挣扎了几个小时,我试着查看代码点火器的文档,但不幸的是它与API无关,我无法弄清楚如何在不使用的情况下上传文件形成。

我不太确定问题是来自我正在使用的服务来测试,apigee,还是问题来自代码。最后,我的目标是在我正在编码的iphone应用程序中实现此功能,但我希望能够在尝试将其包含在我的应用程序中之前测试该功能。

任何人都可以在API中向我提供有关文件上传的信息吗?以及如何正确测试?谢谢。

3 个答案:

答案 0 :(得分:1)

试试这个,它有效!

*输入文件名='图像'

function upload_image(){
 $img = array(); // return variable
 $this->load->helper(array('file','directory'));
 if (!empty($collection)) {
    $path="./uploads/";
    if( !is_dir($path) ) {
        mkdir($path);
    }
    $config['upload_path'] = $path; /* NB! create this dir! */
    $config['allowed_types'] = 'gif|jpg|png|bmp|jpeg';
    $config['file_name'] = 'image001';
    $config['overwrite']=TRUE;

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


    $configThumb = array();
    $configThumb['image_library'] = 'gd2';
    $configThumb['source_image'] = '';
    $configThumb['create_thumb'] = FALSE;
    $configThumb['maintain_ratio'] = FALSE;

      /* Load the image library */
    $this->load->library('image_lib');

      /* We have 5 files to upload
       * If you want more - change the 6 below as needed
       */
        /* Handle the file upload */
    if (isset($_FILES['image']['tmp_name'])) {
        $upload = $this->upload->do_upload('image');

        /* File failed to upload - continue */
        if($upload === FALSE){
            $error = array('error' => $this->upload->display_errors());
            $data['message']=$error['error'];
            continue;   
        } 
        /* Get the data about the file */
        $data = $this->upload->data();
        $img['image']='/'.$data['file_name'];

    }

 }
        return $img;
}

答案 1 :(得分:0)

试试这个,它可能对你有帮助,我使用codeigniter框架工作,这里是控制器

function do_upload()
{
$config['upload_path']          = './uploads/';
$config['allowed_types']        = 'gif|jpg|png';
$config['max_size']             = 8000;
$config['max_width']            = 1024;
$config['max_height']           = 768;

$this->load->library('upload', $config);
if ( ! $this->upload->do_upload('userfile'))
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
}

这是一个视图文件

<?php echo $error;?>
<?php echo form_open_multipart('upload/do_upload');?>
<input type="file" name="userfile" size="20" />
<input type="submit" value="upload" />

答案 2 :(得分:0)

在 codeigniter 中很简单,您也可以使用此方法,从 post 获取数据 method=multiform/form-data

并使用此功能通过使用 md5 更改其名称来上传文件并将其存储在 db 中

$md5 = md5(date('d-m-Y H:i:s'));    //md5 the constant here i have choosen date()
  if(!empty($_FILES['profile_pik']['name']))  //check whether file is there or not
  {
   
  $moveprofilepik='assets/uploads/profile_pik/' . $md5.str_replace(' ', '', $_FILES['d_profile_pik']['name']);   //append the location where you want to move and also concat the name using md5 value
   move_uploaded_file($_FILES['d_profile_pik']['tmp_name'], $move1);  //finally use inbuilt function move_uploaded_file and pass values 
 }