最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 使用Retrofit 以純二進(jìn)制文件流上傳文件的操作代碼

 更新時(shí)間:2024年11月19日 10:25:58   作者:粵M溫同學(xué)  
文章介紹了如何在Android項(xiàng)目中使用Retrofit通過(guò)純二進(jìn)制文件流上傳文件,包括單個(gè)文件流上傳和大文件分段上傳的方法,并詳細(xì)描述了需求協(xié)議、接口定義、RequestInterceptor的使用以及相關(guān)庫(kù)的調(diào)用,感興趣的朋友跟隨小編一起看看吧

一、背景

一般上傳文件都是以表單形式上傳文件,最近項(xiàng)目中涉及到非表單形式上傳文件流,分為單個(gè)文件流上傳、大文件分段上傳,此種情景資料較少,這里記錄下。

二、方案介紹

2.1 需求協(xié)議

1. 上傳文件
API 端點(diǎn):/service/upload
● 方法:PUT
● 請(qǐng)求參數(shù):
    ○ filename:文件名(必選)
○ 請(qǐng)求頭:
    ○ Authorization:用于身份驗(yàn)證的 token(必選)
    ○ X-Request-ID:請(qǐng)求的唯一標(biāo)識(shí)符(必選)
    ○ Upload-Offset:當(dāng)前上傳塊的偏移量(必選)
        ■ 單位:byte
    ○ Upload-Type:文件上傳方式(必選)
        ■ 1 上傳到相冊(cè)(/storage/emulated/0/Pictures/)
        ■ 2 上傳到sdcard(/sdcard/)
○ 請(qǐng)求體
    ○ 文件二進(jìn)制數(shù)據(jù)

2.2 定義接口

格式:http://example.com/api/upload?filename=example.txt
所以應(yīng)該這樣定義接口:
   @PUT("/service/upload")
RequestBody): Call<ResponseBody>
   fun uploadFile(@Query("filename") filename:String,  @Body body: RequestBody):Call<ResponseBody>

2.3 定義一個(gè)RequestInterceptor 迭代器,將請(qǐng)求參數(shù)放到請(qǐng)求頭中

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調(diào)用接口

      // 創(chuàng)建文件名請(qǐng)求體
            val requestBody = RequestBody.create(null, file)//第一個(gè)參數(shù)傳null
            val call = RetrofitClient.getUploadFileService(token, requestId, "0", uploadType)
                .uploadFile(file.name, requestBody)

用到的相關(guān)庫(kù):

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'

到此這篇關(guān)于Android 使用Retrofit 以純二進(jìn)制文件流上傳文件的文章就介紹到這了,更多相關(guān)Android 使用Retrofit 上傳文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

敖汉旗| 老河口市| 商河县| 济源市| 宜章县| 乌兰浩特市| 阿克陶县| 平湖市| 吴江市| 洱源县| 苍溪县| 曲水县| 来宾市| 泽州县| 陵水| 集安市| 图们市| 永福县| 汉源县| 黑水县| 闵行区| 包头市| 开阳县| 康保县| 准格尔旗| 丽江市| SHOW| 新津县| 云和县| 惠安县| 罗甸县| 图木舒克市| 伊吾县| 孟津县| 科尔| 樟树市| 天峨县| 宁化县| 西安市| 金坛市| 绥阳县|