欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android OkHttp 结合php 多图片上传实例

程序员文章站 2023-12-01 11:39:22
今天写项目的时候需要多图片上传,就用okhttp简单写一个例子。 public class mainactivity extends appcompatactiv...

今天写项目的时候需要多图片上传,就用okhttp简单写一个例子。

public class mainactivity extends appcompatactivity {

  private okhttpclient client;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);

    client = new okhttpclient();
    postimage();
  }

  private void postimage(){
    //这里方便演示。读取drawable里的图片。
    bitmap bm = bitmapfactory.decoderesource(getresources(),r.drawable.demo);

    bytearrayoutputstream bytearrayoutputstream = new bytearrayoutputstream();

    bm.compress(bitmap.compressformat.jpeg,100,bytearrayoutputstream);

    multipartbody.builder builder = new multipartbody.builder().settype(multipartbody.form)
        .addformdatapart("img_1","1.jpg", requestbody.create(mediatype.parse("image/jpeg"),bytearrayoutputstream.tobytearray()))
        .addformdatapart("img_2","2.jpg", requestbody.create(mediatype.parse("image/jpeg"),bytearrayoutputstream.tobytearray()))
        ;
    //有多个图片就用for循环添加即可

    multipartbody build = builder.build();

    okhttp3.request bi = new okhttp3.request.builder()
        .url("后台地址") 
        .post(build)
        .build();

    client.newcall(bi).enqueue(new callback() {
      @override
      public void onfailure(call call, ioexception e) {
        log.i("tag", "onfailure: 失败");
      }

      @override
      public void onresponse(call call, okhttp3.response response) throws ioexception {
        log.i("tag", "onresponse: " + response.body().string());
        //提交成功处理结果....
      }
    });

  }
}

配合php后台接收图片地址:

具体代码如下,支持多个图片的上传,返回json格式,方便客户端进行处理数据。

<?php
header('content-type: application/json;charset=utf-8');

if(empty($_files)) die('{"status":0,"msg":"错误提交"}');

$dirpath = './img/';//设置文件保存的目录

if(!is_dir($dirpath)){
  //目录不存在则创建目录
  @mkdir($dirpath);
}

$count = count($_files);//所有文件数

if($count<1) die('{"status":0,"msg":"错误提交"}');//没有提交的文件

$success = $failure = 0;

foreach($_files as $key => $value){
  //循环遍历数据
  $tmp = $value['name'];//获取上传文件名
  $tmpname = $value['tmp_name'];//临时文件路径
  //上传的文件会被保存到php临时目录,调用函数将文件复制到指定目录
  if(move_uploaded_file($tmpname,$dirpath.date('ymdhis').'_'.$tmp)){
    $success++;
  }else{
    $failure++;
  }
}

$arr['status'] = 1;
$arr['msg']   = '提交成功';
$arr['success'] = $success;
$arr['failure'] = $failure;

echo json_encode($arr);

android端使用okhttp上传,测试上传图如下:

Android OkHttp 结合php 多图片上传实例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。