当前位置: 代码网 > it编程>App开发>Android > Android 使用Retrofit 以纯二进制文件流上传文件的操作代码

Android 使用Retrofit 以纯二进制文件流上传文件的操作代码

2024年11月25日 Android 我要评论
一、背景一般上传文件都是以表单形式上传文件,最近项目中涉及到非表单形式上传文件流,分为单个文件流上传、大文件分段上传,此种情景资料较少,这里记录下。二、方案介绍2.1需求协议1. 上传文件api 端点

一、背景

一般上传文件都是以表单形式上传文件,最近项目中涉及到非表单形式上传文件流,分为单个文件流上传、大文件分段上传,此种情景资料较少,这里记录下。

二、方案介绍

2.1 需求协议

1. 上传文件
api 端点:/service/upload
● 方法:put
● 请求参数:
    ○ filename:文件名(必选)
○ 请求头:
    ○ authorization:用于身份验证的 token(必选)
    ○ x-request-id:请求的唯一标识符(必选)
    ○ upload-offset:当前上传块的偏移量(必选)
        ■ 单位:byte
    ○ upload-type:文件上传方式(必选)
        ■ 1 上传到相册(/storage/emulated/0/pictures/)
        ■ 2 上传到sdcard(/sdcard/)
○ 请求体
    ○ 文件二进制数据

2.2 定义接口

格式:http://example.com/api/upload?filename=example.txt
所以应该这样定义接口:
   @put("/service/upload")
requestbody): call<responsebody>
   fun uploadfile(@query("filename") filename:string,  @body body: requestbody):call<responsebody>

2.3 定义一个requestinterceptor 迭代器,将请求参数放到请求头中

class requestinterceptor(val authorization:string,val requestid:string,val offset:string,val uploadtype:string) : interceptor {
    override fun intercept(chain: interceptor.chain): response {
        val request = chain.request()
        val requestbuilder = request.newbuilder()
        requestbuilder.addheader("authorization", authorization)
        requestbuilder.addheader("x-request-id", requestid)
        if(offset.isnotempty()){
            requestbuilder.addheader("upload-offset", offset)
        }
        if(uploadtype.isnotempty()){
            requestbuilder.addheader("upload-type", uploadtype)
        }
//        requestbuilder.removeheader("content-length")
//        requestbuilder.removeheader("content-transfer-encoding")
//        requestbuilder.removeheader("content-disposition")
        return chain.proceed(requestbuilder.build())
    }
}

2.4调用接口

      // 创建文件名请求体
            val requestbody = requestbody.create(null, file)//第一个参数传null
            val call = retrofitclient.getuploadfileservice(token, requestid, "0", uploadtype)
                .uploadfile(file.name, requestbody)

用到的相关库:

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
   implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
   implementation 'com.squareup.okhttp3:logging-interceptor:3.14.9'

到此这篇关于android 使用retrofit 以纯二进制文件流上传文件的文章就介绍到这了,更多相关android 使用retrofit 上传文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com