bai 3 år sedan
förälder
incheckning
6534cf72b7

+ 1 - 1
demo/src/main/java/com/framework/app/Constants.kt

@@ -8,7 +8,7 @@ const val testIP = "http://192.168.0.48:8876/"
 
 const val tencentIP = "http://82.157.28.170:8876/"
 
-const val IP = tencentIP
+const val IP = testIP
 
 const val pathDownloadMap = "adm/downloadMap?key="
 

+ 2 - 0
demo/src/main/java/com/framework/app/api/Api.kt

@@ -3,6 +3,7 @@ package com.framework.app.api
 import com.framework.mvvm.model.data.Model
 import com.framework.mvvm.model.vo.*
 import retrofit2.http.Body
+import retrofit2.http.Headers
 import retrofit2.http.POST
 
 interface Api {
@@ -27,6 +28,7 @@ interface Api {
     /**
      * 上传建筑数据
      */
+    @Headers("Content-Encoding: gzip")
     @POST("adm/upload")
     suspend fun uploadBuilding(@Body building: UploadBuilding): Model<UploadResult>
 }

+ 42 - 0
demo/src/main/java/com/framework/app/http/GzipRequestInterceptor.kt

@@ -0,0 +1,42 @@
+package com.framework.app.http
+
+import okhttp3.*
+import okio.*
+
+/**
+ * Gzip 压缩
+ */
+class GzipRequestInterceptor : Interceptor {
+    override fun intercept(chain: Interceptor.Chain): Response {
+        val originalRequest: Request = chain.request()
+        println("""originalRequest.header("Content-Encoding"):${originalRequest.header("Content-Encoding")}""")
+        if (originalRequest.body == null || originalRequest.header("Content-Encoding") != "gzip") {
+            return chain.proceed(originalRequest)
+        }
+
+        val compressedRequest: Request = originalRequest.newBuilder()
+            .header("Content-Encoding", "gzip")
+            .method(originalRequest.method, gzip(originalRequest.body!!))
+            .build()
+        return chain.proceed(compressedRequest)
+    }
+
+    private fun gzip(body: RequestBody): RequestBody {
+        return object : RequestBody() {
+            override fun contentType(): MediaType? {
+                return body.contentType()
+            }
+
+            @Throws(IOException::class)
+            override fun writeTo(sink: BufferedSink) {
+                val gzipSink: BufferedSink = GzipSink(sink).buffer()
+                body.writeTo(gzipSink)
+                gzipSink.close()
+            }
+
+            override fun contentLength(): Long {
+                return -1
+            }
+        }
+    }
+}

+ 8 - 0
demo/src/main/java/com/framework/di/Di.kt

@@ -3,6 +3,7 @@ package com.framework.di
 import android.content.Context
 import com.framework.app.IP
 import com.framework.app.api.Api
+import com.framework.app.http.GzipRequestInterceptor
 import com.framework.mvvm.model.db.AdmDatabase
 import com.framework.mvvm.model.repository.AdmRepository
 import com.framework.mvvm.mv.AdmViewModel
@@ -36,6 +37,7 @@ val httpModule = DI.Module("netModule") {
                 .connectTimeout(10, TimeUnit.SECONDS)
                 .readTimeout(300, TimeUnit.SECONDS)
                 .writeTimeout(300, TimeUnit.SECONDS)
+                .addInterceptor(instance<GzipRequestInterceptor>())
                 .addInterceptor(instance<HttpLoggingInterceptor>())
                 .build()
         }
@@ -55,6 +57,12 @@ val httpModule = DI.Module("netModule") {
         }
     }
 
+    bind {
+        singleton {
+            GzipRequestInterceptor()
+        }
+    }
+
     // Api 对象
     bind {
         singleton { instance<Retrofit>().create(Api::class.java) }