使用Retrofit上传图片
2024-09-08 00:17:45
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;
}
额外参数
这个直接添加就行了.................
最新文章
- Unity3d Shader开发(三)Pass(Culling &; Depth Testing)
- 浅谈ThreadPool 线程池
- 解决Xcode升级7.0后,部分.a静态库在iOS9.0的模拟器上,link失败的问题
- spark java 代码example
- Cesium原理篇:3D Tiles(1)渲染调度
- 开源中文分词工具探析(五):FNLP
- python中时间日期格式化符号:
- Selenium_chromedriver与chrome版本映射表(更新至v2)
- Libgdx 1.5.2发布
- openfire推送离线聊天信息的插件
- Javascript的组成——EMACScript、DOM、BOM
- js作用域题目
- PAT 乙级 1067 试密码(20 分)
- Java之装饰模式
- WebSphere ILog JRules 域的介绍和定制
- 添加sqljdbc4的maven依赖
- R语言进阶之4:数据整形(reshape)
- SecureCRTPortable的安装和使用(图文详解)
- 用CSS/CSS3 实现水平居中和垂直居中,水平垂直居中的方式
- 如何使用gitbash 把你的代码托管到github
热门文章
- Linux_yum仓库管理
- Mysql_二进制方式安装详解
- 040.Python进程和Join
- 快速上手 Linkerd v2 Service Mesh(服务网格)
- [论文阅读笔记] Structural Deep Network Embedding
- GO语言面向对象08---投胎游戏
- Go语言的函数02---参数
- Fiddler抓包后转成jmeter脚本
- 情景剧:C/C++中的未定义行为(undefined behavior)
- 使用ubuntu charmed kubernetes 部署一套生产环境的集群