我正在尝试使用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中向我提供有关文件上传的信息吗?以及如何正确测试?谢谢。
答案 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
}