Android OkHttp3 上传多张图片

Posted 云上人间钦自赏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android OkHttp3 上传多张图片相关的知识,希望对你有一定的参考价值。

经过实践,androidphp交互,已经成功搞定!

一、Android 端

 /**
     * 上传文件及参数
     */
    private void sendMultipart()
        File sdcache = getExternalCacheDir();
        int cacheSize = 10 * 1024 * 1024;
        //设置超时时间及缓存
        OkHttpClient.Builder builder = new OkHttpClient.Builder()
                .connectTimeout(15, TimeUnit.SECONDS)
                .writeTimeout(20, TimeUnit.SECONDS)
                .readTimeout(20, TimeUnit.SECONDS)
                .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize));


        OkHttpClient mOkHttpClient=builder.build();

        MultipartBody.Builder mbody=new MultipartBody.Builder().setType(MultipartBody.FORM);

        List<File> fileList=new ArrayList<File>();
        File img1=new File("/sdcard/wangshu.jpg");
        fileList.add(img1);
        File img2=new File("/sdcard/123.jpg");
        fileList.add(img2);
        int i=0;
        for(File file:fileList)
            if(file.exists())
                Log.i("imageName:",file.getName());//经过测试,此处的名称不能相同,如果相同,只能保存最后一个图片,不知道那些同名的大神是怎么成功保存图片的。
                mbody.addFormDataPart("image"+i,file.getName(),RequestBody.create(MEDIA_TYPE_PNG,file));
                i++;
            
        

        RequestBody requestBody =mbody.build();
        Request request = new Request.Builder()
            .header("Authorization", "Client-ID " + "...")
            .url("http://192.168.1.105/interface/index.php?action=sendMultipart")
            .post(requestBody)
            .build();

        mOkHttpClient.newCall(request).enqueue(new Callback() 
            @Override
            public void onFailure(Call call, IOException e) 

            

            @Override
            public void onResponse(Call call, Response response) throws IOException 
                Log.i("InfoMSG", response.body().string());
            
        );
    





二、Php服务端

if ($act == "sendMultipart") 
	$result="";
	try 
		foreach ($_FILES as $key => $val) 
			$imgName = time().rand(1000, 9999);//随机数
			$folder = "images";//接口文件同目录下创建此文件夹,当然也可以通过代码的形式判断/创建
			$file_dir = $folder . "/" . $imgName . ".jpg";
			if (move_uploaded_file($val["tmp_name"], $file_dir)) 
				$result .= $val["name"] . "保存成功";
			 else 
				$result .= "在服务器中保存失败" . $val["tmp_name"] . "--------";
			
			echo "返回信息:" . $result."<br />\\n";
		
	 catch(exception $ex) 
		echo $ex;
	


没什么可总结的了,都在注释里了。









以上是关于Android OkHttp3 上传多张图片的主要内容,如果未能解决你的问题,请参考以下文章

Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等

Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等

将多张图片从图库上传到android中的服务器

Android使用Retrofit技术仿微信图片上传,可以选择多张图片拍照上传

android 文件流的方式多张图片上传,并多个参数

Android Retrofit 实现(图文上传)文字(参数)和多张图片一起上传