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;
}

额外参数

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

使用Retrofit上传图片的更多相关文章

  1. Retrofit 2.1 入门

    Retrofit 2.1入门 , map);    try {        Response<String>body=call.execute();        System.out. ...

  2. Retrofit 2.0 超能实践(三),轻松实现文件/多图片上传/Json字符串

    文:http://blog.csdn.net/sk719887916/article/details/51755427 Tamic 简书&csdn同步 通过前两篇姿势的入门 Retrofit ...

  3. Retrofit实现图文上传至服务器

    Retrofit实现图文上传至服务器 前言:现在大多数的项目中都涉及图片+文字上传了,下面请详见实现原理: 开发环境:AndroidStudio 1.引入依赖: compile 'com.square ...

  4. Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单

    如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...

  5. 博客使用BOS上传图片

    1.博客平台的选定 从大学开始做个人主页算起,最开始是使用html,CSSS写简单的页面,后面大学毕业之后接触到了WordPress,就开始用WordPress搭建网站.现在还维护着一个农村网站.ht ...

  6. 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~

    一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...

  7. nodejs利用ajax实现网页无刷新上传图片

    nodejs利用ajax实现网页无刷新上传图片 标签(空格分隔): nodejs 通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转. 利用ajax技术和FormDat ...

  8. Android Retrofit 2.0 使用-补充篇

    推荐阅读,猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava 4.RxBus 5.Android MVP+Retrofit+RxJava实践小 ...

  9. Android MVP+Retrofit+RxJava实践小结

    关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...

随机推荐

  1. MySQL配置HeartBeat实现心跳监控和浮动IP

    1. 初始化环境配置 /sbin/chkconfig --add mysqld /sbin/chkconfig mysqld on ln -s /usr/local/mysql/bin/mysql / ...

  2. MySQL给某个用户给某个库表设置权限

    -- 用root(最高权限的用户)进行以下操作-- 创建数据库:emc_power CREATE DATABASE emc_power DEFAULT CHARACTER SET utf8 COLLA ...

  3. Linux服务之nginx服务篇五(静态/动态文件缓存)

    一.nginx实现静态文件缓存实战 1.nginx静态文件缓存 如果要熟练使用nginx来实现文件的缓存,那下面的几个指令你必须要牢记于心 (1)指令1:proxy_cache_path 作用:设置缓 ...

  4. Linux服务之DNS服务篇

    一.DNS服务概述 DNS(Domain Name System)域名系统,在TCP/IP 网络中有非常重要的地位,能够提供域名与IP地址的解析服务. DNS 是一个分布式数据库,命名系统采用层次的逻 ...

  5. Python中PyQuery库的使用

    pyquery库是jQuery的Python实现,可以用于解析HTML网页内容,我个人写过的一些抓取网页数据的脚本就是用它来解析html获取数据的. 它的官方文档地址是:http://packages ...

  6. Django中数据库操作相关的错误

    问题:字段修改属性发生错误 1> >python manage.py makemigrations You are trying to add a non-nullable field ' ...

  7. Java基础之概述

    1. 什么是程序 程序是计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合 2. Java三大版本 Java SE 标准版 Java EE 企业版 Java ME 小型版 3. Java重要 ...

  8. 如何保证mq不丢消息

    1.消息的发送流程 一条消息从生产到被消费,将会经历3个阶段 生产阶段,Producer 新建消息,然后通过网络将消息投递给MQ Broker 存储阶段,消息将会存储在Broker端磁盘中 消费阶段, ...

  9. BTC芯片介绍

    BTC芯片介绍 Innosilicon宣布全球第一和最佳的28nm比特币ASIC和参考矿机 A1Craft(也称为A1)是2013年世界上最好的BTC ASIC,这是比特币区块哈希算法的易于使用,定制 ...

  10. Dockerfile构建实践

    Dockerfile构建实践 本文介绍了用于构建有效图像的推荐最佳实践和方法. Docker通过从一个Dockerfile文本文件中读取指令来自动构建映像,该文本文件按顺序包含构建给定映像所需的所有命 ...