iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在Android中利用OkHttp实现一个图片上传功能
  • 393
分享到

如何在Android中利用OkHttp实现一个图片上传功能

okhttpandroidroi 2023-05-31 00:05:41 393人浏览 泡泡鱼
摘要

本篇文章给大家分享的是有关如何在Android中利用OkHttp实现一个图片上传功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现方法如下:object UploadFil

本篇文章给大家分享的是有关如何在Android中利用OkHttp实现一个图片上传功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

实现方法如下:

object UploadFileHelper { //--------ContentType private val MEDIA_OBJECT_STREAM = MediaType.parse("multipart/fORM-data") //--------上传延时时间 private val WRITE_TIME_OUT:Long = 50 private val mOkHttpClient by lazy { OkHttpClient() } //------基本参数---------- val version = AppConstant.api_VERSION val platform = AppConstant.API_PLATFORM val methodName = AppConstant.API_UPLOADFILE_METHOD val token = ignoreException("") { UserModel.token() } val userId = ignoreException(0) { UserModel.id() } //------------------------ //不带参数同步上传文件 fun syncUploadFile(actionUrl: String = "",file: File,maxW: Int = 256,maxH: Int = 256):String&#63;{  val uploadFile = optionFileSize(file,maxW,maxH,null)  if(uploadFile!=null){   val response = createNoParamsOkHttpCall(actionUrl,uploadFile).execute()   if(uploadFile.exists())    uploadFile.delete()   return getResponseToPath(response.body()!!.string())  }  return null } //不带参数异步上传文件 fun asyncUploadFile(actionUrl:String = "", file: File,maxW: Int = 256,maxH: Int = 256,      uploadCallBackListener: UploadCallBackListener&#63; = null){  val uploadFile = optionFileSize(file,maxW,maxH,uploadCallBackListener)  if(uploadFile!=null)  createNoParamsOkHttpCall(actionUrl,uploadFile).enqueue(object: Callback{   override fun onFailure(c: Call, e: IOException) {    uploadCallBackListener&#63;.onUploadFailure(e.toString())   }   override fun onResponse(c: Call, response: Response) {    if(uploadFile.exists())    uploadFile.delete()     uploadCallBackListener&#63;.onUploadSuccess(getResponseToPath(response.body()!!.string()))    response.body()!!.close()   }  }) } //带参数同步上传文件 fun syncParamsUploadFile(actionUrl: String= "",file: File,params:HashMap<String,Any>,      maxW: Int = 256,maxH: Int = 256):String&#63;{  val uploadFile = optionFileSize(file,maxW,maxH,null)  if(uploadFile!=null){   params.put("filename",uploadFile)   val response = createParamsOkHttpCall(actionUrl,params,null,false).execute()   if(uploadFile.exists())    uploadFile.delete()   return getResponseToPath(response.body()!!.string())  }  return null } //带参数异步上传文件 fun asyncParamsUploadFile(actionUrl: String= "",file: File,params:HashMap<String,Any>,maxW: Int = 256,maxH: Int = 256,      uploadCallBackListener: UploadCallBackListener&#63; = null, isProgress:Boolean = true){  val uploadFile = optionFileSize(file,maxW,maxH,uploadCallBackListener)  if(uploadFile!=null){   params.put("filename",uploadFile)   createParamsOkHttpCall(actionUrl,params,uploadCallBackListener,isProgress).enqueue(object :Callback{    override fun onFailure(c: Call, e: IOException) {     uploadCallBackListener&#63;.onUploadFailure(e.toString())    }    override fun onResponse(c: Call, response: Response) {      if(uploadFile.exists())      uploadFile.delete()     uploadCallBackListener&#63;.onUploadSuccess(getResponseToPath(response.body()!!.string()))     response.body()!!.close()    }   })  } } //------创建一个没有带参数的Call fun createNoParamsOkHttpCall(actionUrl: String,file: File):Call{  val requestUrl = "${AppConstant.HOST}/$actionUrl"  val requestBody = RequestBody.create(MEDIA_OBJECT_STREAM,file)  val request = Request.Builder().url(requestUrl).post(requestBody).build()  return mOkHttpClient.newBuilder().writeTimeout(WRITE_TIME_OUT,TimeUnit.SECONDS).build().newCall(request) } //------创建一个带参数的Call fun createParamsOkHttpCall(actionUrl: String,params:Map<String,Any>,        uploadCallBackListener: UploadCallBackListener&#63; = null,        isProgress:Boolean = true):Call{  //-----AppConstant.HOST 上传图片的Server的BASE_URL http://xxx.com  val requestUrl = "${AppConstant.HOST}/$actionUrl"  val builder = MultipartBody.Builder()  builder.setType(MultipartBody.FORM)  val newParams = mutableMapOf(    "version" to version,    "platform" to platform,    "methodName" to methodName,    "token" to token,    "user_id" to userId)  newParams.putAll(params)  newParams.forEach( action = {   if(it.value is File){    builder.addFormDataPart(it.key, (it.value as File).name,    if(isProgress) createProgressRequestBody(MEDIA_OBJECT_STREAM!!,(it.value as File),uploadCallBackListener)    else RequestBody.create(null, (it.value as File)))   }else{    builder.addFormDataPart(it.key,it.value.toString())   }  })  val body = builder.build()  val request = Request.Builder().url(requestUrl).post(body).build()  return mOkHttpClient.newBuilder().writeTimeout(WRITE_TIME_OUT,TimeUnit.SECONDS).build().newCall(request) } //创建带进度RequestBody fun createProgressRequestBody(contentType:MediaType,file:File,         uploadCallBackListener: UploadCallBackListener&#63; = null):RequestBody{  return object:RequestBody(){   override fun contentType(): MediaType = contentType   override fun contentLength() = file.length()   override fun writeTo(sink: BufferedSink) {    ignoreException {     val source = Okio.source(file)     val buf = Buffer()     val remaining = contentLength()     var current: Long = 0     var readCount: Long = source.read(buf, 2048)     while (readCount != -1L) {      sink.write(buf, readCount)      current += readCount      uploadCallBackListener&#63;.onUploadProgress(current,remaining)      readCount = source.read(buf, 2048)     }    }   }  } } //根据图片大小简单压缩 fun optionFileSize(file: File,maxW:Int,maxH:Int,uploadCallBackListener: UploadCallBackListener&#63;):File&#63;{  try {   val uploadFile = File(AppBridge.AppContext().externalCacheDir, file.hashCode().toString())   ImageUtils.resize(file, maxW, maxH, uploadFile)   return uploadFile  } catch (e: Exception) {   uploadCallBackListener&#63;.onUploadFailure("压缩图片失败")   return null  } } //解析Server返回的数据获取图片路径,  fun getResponseToPath(response:String):String{  val dataJSONObj = jsONObject(response).get("data") as JSONObject  return dataJsonObj.get("path") as String } //回调方法 interface UploadCallBackListener{  fun onUploadFailure(error:String)  fun onUploadProgress(currentSize:Long,totalSize:Long)  fun onUploadSuccess(path:String) }}

--结束END--

本文标题: 如何在Android中利用OkHttp实现一个图片上传功能

本文链接: https://www.lsjlt.com/news/222444.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在Android中利用OkHttp实现一个图片上传功能
    本篇文章给大家分享的是有关如何在Android中利用OkHttp实现一个图片上传功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现方法如下:object UploadFil...
    99+
    2023-05-31
    okhttp android roi
  • 如何在Android中利用OkHttp与php实现一个图片上传功能
    这篇文章给大家介绍如何在Android中利用OkHttp与php实现一个图片上传功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。今天写项目的时候需要多图片上传,就用okhttp简单写一个例子。public class...
    99+
    2023-05-31
    android okhttp php
  • Android开发中怎么实现一个图片上传功能
    本篇文章给大家分享的是有关Android开发中怎么实现一个图片上传功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。代码实现:private void showDialog()...
    99+
    2023-05-31
    android roi
  • 如何在Android中利用Glide实现一个图片圆角功能
    如何在Android中利用Glide实现一个图片圆角功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、简介:介绍两种使用 BitmapTransformation 来实...
    99+
    2023-05-31
    glide android roi
  • 如何在Android中利用imageview实现一个图片缩放功能
    如何在Android中利用imageview实现一个图片缩放功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android 自定义imageview实现图片缩放实例详解&nb...
    99+
    2023-05-31
    android imageview age
  • 利用Spring Boot怎么样实现一个图片上传功能
    利用Spring Boot怎么样实现一个图片上传功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体内容如下package com.clou.inteface.domain....
    99+
    2023-05-31
    springboot spring boo
  • 如何android在中使用springMvc实现图片上传功能
    本篇文章为大家展示了如何android在中使用springMvc实现图片上传功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体内容如下Android端:String fileName = tvF...
    99+
    2023-05-31
    android roi springmvc
  • 如何在Java项目中实现一个简单的图片上传功能
    如何在Java项目中实现一个简单的图片上传功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:import java.io.*;import java....
    99+
    2023-05-31
    java ava 目中
  • 怎么在HTML5中实现一个图片上传预处理功能
    这篇文章将为大家详细讲解有关怎么在HTML5中实现一个图片上传预处理功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。获取图片通过 File API 获取图片。var input&...
    99+
    2023-06-09
  • 如何在Android应用中实现一个图片添加功能
    如何在Android应用中实现一个图片添加功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、首先这是用GridView实现的<&#63;xml...
    99+
    2023-05-31
    android roi
  • 如何在Android应用中利用ImageView实现一个选择本地图片功能
    这期内容当中小编将会给大家带来有关如何在Android应用中利用ImageView实现一个选择本地图片功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。布局文件:<RelativeLayout xm...
    99+
    2023-05-31
    android imageview age
  • 在Android中使用ksoap调用webservice实现图片上传功能
    本篇文章给大家分享的是有关在Android中使用ksoap调用webservice实现图片上传功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。代码实现private Exec...
    99+
    2023-05-31
    android ksoap webservice
  • HTML5中怎么实现一个图片压缩上传功能
    这篇文章给大家介绍HTML5中怎么实现一个图片压缩上传功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、创建一个图片和一个canvasXML/HTML Code复制内容到剪贴板va...
    99+
    2022-10-19
  • 如何在Retrofit中利用Rxjava实现一个图片下载功能
    这篇文章将为大家详细讲解有关如何在Retrofit中利用Rxjava实现一个图片下载功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先我们看一下Retrofit常规的用法,在不使用Rxj...
    99+
    2023-05-31
    retrofit rxjava ava
  • 如何在Java中利用FileUpload实现一个文件上传功能
    如何在Java中利用FileUpload实现一个文件上传功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体方法如下://创建磁盘文件项工厂 DiskFile...
    99+
    2023-05-31
    java fileupload ava
  • 如何在Java中利用COS实现一个文件上传功能
    如何在Java中利用COS实现一个文件上传功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。cos是O'Rrilly公司开发的一款用于HTTP上传文件的OpenSo...
    99+
    2023-05-31
    cos java ava
  • Android 中如何实现一个全屏图片功能
    这篇文章将为大家详细讲解有关Android 中如何实现一个全屏图片功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、在Activity的onCreate方法中实现: @Override ...
    99+
    2023-05-31
    android roi 如何实现
  • 如何在Android应用中利用SDK实现一个地图功能
    这期内容当中小编将会给大家带来有关如何在Android应用中利用SDK实现一个地图功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。找到控制台创建一个应用添加key名称,注意命名规范,还有就是下面的SHA...
    99+
    2023-05-31
    android sdk roi
  • 如何在Android中利用Recyclerview实现一个上拉加载功能
    如何在Android中利用Recyclerview实现一个上拉加载功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在项目中使用列表的下拉刷新和上拉加载更多是很常见的功能,下拉...
    99+
    2023-05-31
    android recyclerview recycle
  • 如何在Android中实现一个在图片中添加文字功能
    这篇文章给大家介绍如何在Android中实现一个在图片中添加文字功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android自定义实现图片加文字功能分四步来写: 1,组合控件的xml; 2,自定义组合控件的属性; ...
    99+
    2023-05-31
    android roi %d
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作