【Android】Android客户端使用okhttp上传文件php服务器

来源:互联网 发布:长城证券软件 编辑:程序博客网 时间:2024/05/18 02:25

为了更好的在应对网络访问,最近学习了一下okhttp,感觉挺方便使用的,首先要使用okhttp,需要在项目中导入okhttp-x.x.x.jar   okhttputils-x_x_x.jar   okio-x.x.x.jar 这三个jar包,下面贴出Android端和服务器端关键代码:

private void uplodeImage(File mFile) {//mFile一个真实存在的图片文件if (!mFile.exists())        {            Toast.makeText(MainActivity.this, "文件不存在,请修改文件路径", Toast.LENGTH_SHORT).show();            return;        }OkHttpUtils.post().url(UPLODE_URL)    .addFile("file", mFile.getName(), mFile)    .build()    .execute(new Callback<String>() {@Overridepublic void onError(Call arg0, Exception arg1) {System.out.println("上传文件失败");info.setText("REEOR:upload error!");}@Overridepublic void onResponse(String arg0) {//System.out.println(arg0);//上传成功返回文件在服务器上的唯一路径,将此路径保存到数据库中info.setText(arg0);//这里会返回一个包含上传文件在服务器上的唯一路径,上传成功后将这个字符串保存到数据库中去}@Overridepublic String parseNetworkResponse(Response arg0) throws Exception {// TODO Auto-generated method stubreturn arg0.body().string();}}) ;}


服务器端的代码:

<?php class upload{protected $fileName;protected $maxSize;protected $allowMime;protected $allowExt;protected $uploadPath;protected $imgFlag;protected $fileInfo;protected $error;protected $ext;/** * @param string $fileName * @param string $uploadPath * @param string $imgFlag * @param number $maxSize * @param array $allowExt * @param array $allowMime */public function __construct($fileName='myFile',$uploadPath='./uploads',$imgFlag=true,$maxSize=5242880,$allowExt=array('jpeg','jpg','png','gif'),$allowMime=array('image/jpeg','image/png','image/gif')){        $this->fileName=$fileName;$this->maxSize=$maxSize;$this->allowMime=$allowMime;$this->allowExt=$allowExt;$this->uploadPath=$uploadPath;$this->imgFlag=$imgFlag;$this->fileInfo=$_FILES[$this->fileName];}/** * 检测上传文件是否出错 * @return boolean */protected function checkError(){if(!is_null($this->fileInfo)){if($this->fileInfo['error']>0){switch($this->fileInfo['error']){case 1:$this->error='超过了PHP配置文件中upload_max_filesize选项的值';break;case 2:$this->error='超过了表单中MAX_FILE_SIZE设置的值';break;case 3:$this->error='文件部分被上传';break;case 4:$this->error='没有选择上传文件';break;case 6:$this->error='没有找到临时目录';break;case 7:$this->error='文件不可写';break;case 8:$this->error='由于PHP的扩展程序中断文件上传';break;}return false;}else{return true;}}else{$this->error='文件上传出错';return false;}}/** * 检测上传文件的大小 * @return boolean */protected function checkSize(){if($this->fileInfo['size']>$this->maxSize){$this->error='上传文件过大';return false;}return true;}/** * 检测扩展名 * @return boolean */protected function checkExt(){$this->ext=strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION));if(!in_array($this->ext,$this->allowExt)){$this->error='不允许的扩展名';return false;}return true;}/** * 检测文件的类型 * @return boolean */protected function checkMime(){if(!in_array($this->fileInfo['type'],$this->allowMime)){$this->error='不允许的文件类型';return false;}return true;}/** * 检测是否是真实图片 * @return boolean */protected function checkTrueImg(){if($this->imgFlag){if(!@getimagesize($this->fileInfo['tmp_name'])){$this->error='不是真实图片';return false;}return true;}}/** * 检测是否通过HTTP POST方式上传上来的 * @return boolean */protected function checkHTTPPost(){if(!is_uploaded_file($this->fileInfo['tmp_name'])){$this->error='文件不是通过HTTP POST方式上传上来的';return false;}return true;}/** *显示错误  */protected function showError(){return (Array(    'rType'=>-30,    'rMessage'=>$this->error    ));}/** * 检测目录不存在则创建 */protected function checkUploadPath(){if(!file_exists($this->uploadPath)){mkdir($this->uploadPath,0777,true);}}/** * 产生唯一字符串 * @return string */protected function getUniName(){return md5(uniqid(microtime(true),true));}/** * 上传文件 * @return string */public function uploadFile(){if($this->checkError()&&$this->checkSize()&&$this->checkExt()&&$this->checkMime()&&$this->checkTrueImg()&&$this->checkHTTPPost()){$this->checkUploadPath();$this->uniName=$this->getUniName();$this->destination=$this->uploadPath.'/'.$this->uniName.'.'.$this->ext;if(@move_uploaded_file($this->fileInfo['tmp_name'], $this->destination)){return  Array(    'rType' => 0,    'rMessage' => $this->destination    );}else{$this->error='文件移动失败';$this->showError();}}else{return $this->showError();}}}

<?phprequire_once 'upload.class.php';header("Content-type:text/html;charset=utf8");$up = new upload('filename');echo json_encode($up->uploadFile(),JSON_UNESCAPED_UNICODE);




1 0