Retrofit使用协程发送请求参考文章 :https://www.cnblogs.com/sw-code/p/14451921.html

导入依赖

app的build文件中加入:

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
  • 注意依赖版本

Retrofit实例

/**
* 创建Retrofit提供API Service
*/
object RetrofitClient { const val BASE_URL = "http://192.168.2.194:8080/" // http://localhost:8080/ val okHttpClient = OkHttpClient.Builder()
.callTimeout(30, TimeUnit.SECONDS)
.build() val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build() val articleService = retrofit.create(ArticleService::class.java) }

Service

interface ArticleService {
@Multipart
@POST("article/upload/picture")
suspend fun uploadSingle(@Part file: MultipartBody.Part): ResultData<Picture> @Multipart
@POST("article/upload/pictures")
suspend fun uploadMulti(@Part files: List<MultipartBody.Part>): ResultData<Picture>
}
  • 注意,请求路径前不加/,因为BASE_URL中已经加了

在ViewModel中使用

class ArticleViewModel : ViewModel() {

    val picture by lazy {
MutableLiveData<Picture>()
} /**
* 上传单张图片
*/
fun uploadSinglePicture(file: File) {
val builder = MultipartBody.Builder().setType(MultipartBody.FORM) //表单类型
val requestFile: RequestBody = RequestBody.create(MediaType.parse("image/*"), file)
builder.addFormDataPart("file", file.name, requestFile)
val part = builder.build().part(0)
viewModelScope.launch {
val resultData = RetrofitClient.articleService.uploadSingle(part)
picture.value = resultData.data
}
} /**
* 上传多张图片
*/
fun uploadSinglePicture(files: List<File>) {
val builder = MultipartBody.Builder().setType(MultipartBody.FORM) //表单类型
for (file in files) {
val requestFile: RequestBody = RequestBody.create(MediaType.parse("image/*"), file)
builder.addFormDataPart("file", file.name, requestFile)
}
val parts = builder.build().parts()
viewModelScope.launch {
val resultData = RetrofitClient.articleService.uploadMulti(parts)
picture.value = resultData.data
}
}
}

SpringBoot项目接收

/**
* 接收单张图片
*/
@PostMapping("upload/picture")
public Map<String, Object> uploadPicture(@RequestParam("file") MultipartFile file) {
System.out.println(file.getOriginalFilename());
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("url", "http://localhost:8080/picture/" + file.getOriginalFilename());
return dataMap;
}

额外参数

这个直接添加就行了.................

最新文章

  1. Unity3d Shader开发(三)Pass(Culling &amp; Depth Testing)
  2. 浅谈ThreadPool 线程池
  3. 解决Xcode升级7.0后,部分.a静态库在iOS9.0的模拟器上,link失败的问题
  4. spark java 代码example
  5. Cesium原理篇:3D Tiles(1)渲染调度
  6. 开源中文分词工具探析(五):FNLP
  7. python中时间日期格式化符号:
  8. Selenium_chromedriver与chrome版本映射表(更新至v2)
  9. Libgdx 1.5.2发布
  10. openfire推送离线聊天信息的插件
  11. Javascript的组成——EMACScript、DOM、BOM
  12. js作用域题目
  13. PAT 乙级 1067 试密码(20 分)
  14. Java之装饰模式
  15. WebSphere ILog JRules 域的介绍和定制
  16. 添加sqljdbc4的maven依赖
  17. R语言进阶之4:数据整形(reshape)
  18. SecureCRTPortable的安装和使用(图文详解)
  19. 用CSS/CSS3 实现水平居中和垂直居中,水平垂直居中的方式
  20. 如何使用gitbash 把你的代码托管到github

热门文章

  1. Linux_yum仓库管理
  2. Mysql_二进制方式安装详解
  3. 040.Python进程和Join
  4. 快速上手 Linkerd v2 Service Mesh(服务网格)
  5. [论文阅读笔记] Structural Deep Network Embedding
  6. GO语言面向对象08---投胎游戏
  7. Go语言的函数02---参数
  8. Fiddler抓包后转成jmeter脚本
  9. 情景剧:C/C++中的未定义行为(undefined behavior)
  10. 使用ubuntu charmed kubernetes 部署一套生产环境的集群