kunfei 3 лет назад
Родитель
Сommit
d3306caa3c

+ 1 - 0
app/src/main/assets/updateLog.md

@@ -15,6 +15,7 @@
 **2023/06/16**
 **2023/06/16**
 
 
 * 修复书源拖动排序乱跳的问题
 * 修复书源拖动排序乱跳的问题
+* 上传导出支持压缩
 
 
 **2023/06/15**
 **2023/06/15**
 
 

+ 24 - 1
app/src/main/java/io/legado/app/help/DirectLinkUpload.kt

@@ -5,7 +5,11 @@ import io.legado.app.exception.NoStackTraceException
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.utils.ACache
 import io.legado.app.utils.ACache
+import io.legado.app.utils.FileUtils
 import io.legado.app.utils.GSON
 import io.legado.app.utils.GSON
+import io.legado.app.utils.compress.ZipUtils
+import io.legado.app.utils.createFileReplace
+import io.legado.app.utils.externalCache
 import io.legado.app.utils.fromJsonArray
 import io.legado.app.utils.fromJsonArray
 import io.legado.app.utils.fromJsonObject
 import io.legado.app.utils.fromJsonObject
 import splitties.init.appCtx
 import splitties.init.appCtx
@@ -27,8 +31,27 @@ object DirectLinkUpload {
         if (downloadUrlRule.isBlank()) {
         if (downloadUrlRule.isBlank()) {
             throw NoStackTraceException("下载地址规则未配置")
             throw NoStackTraceException("下载地址规则未配置")
         }
         }
+        var mFileName = fileName
+        var mFile = file
+        var mContentType = contentType
+        if (rule.compress && contentType != "application/zip") {
+            mFileName = "$fileName.zip"
+            mContentType = "application/zip"
+            mFile = when (file) {
+                is File -> {
+                    val zipFile = File(FileUtils.getPath(appCtx.externalCache, "upload", mFileName))
+                    zipFile.createFileReplace()
+                    ZipUtils.zipFile(file, zipFile)
+                    zipFile
+                }
+
+                is ByteArray -> ZipUtils.zipByteArray(file)
+                is String -> ZipUtils.zipString(file)
+                else -> ZipUtils.zipString(GSON.toJson(file))
+            }
+        }
         val analyzeUrl = AnalyzeUrl(url)
         val analyzeUrl = AnalyzeUrl(url)
-        val res = analyzeUrl.upload(fileName, file, contentType)
+        val res = analyzeUrl.upload(mFileName, mFile, mContentType)
         val analyzeRule = AnalyzeRule().setContent(res.body, res.url)
         val analyzeRule = AnalyzeRule().setContent(res.body, res.url)
         val downloadUrl = analyzeRule.getString(downloadUrlRule)
         val downloadUrl = analyzeRule.getString(downloadUrlRule)
         if (downloadUrl.isBlank()) {
         if (downloadUrl.isBlank()) {

+ 3 - 1
app/src/main/java/io/legado/app/utils/FileExtensions.kt

@@ -42,7 +42,9 @@ fun File.createFileIfNotExist(): File {
 
 
 fun File.createFileReplace(): File {
 fun File.createFileReplace(): File {
     if (!exists()) {
     if (!exists()) {
-        parentFile?.createFileIfNotExist()
+        parent?.let {
+            File(it).mkdirs()
+        }
         createNewFile()
         createNewFile()
     } else {
     } else {
         delete()
         delete()

+ 6 - 2
app/src/main/java/io/legado/app/utils/compress/ZipUtils.kt

@@ -16,17 +16,21 @@ import java.util.zip.*
 @Suppress("unused", "MemberVisibilityCanBePrivate")
 @Suppress("unused", "MemberVisibilityCanBePrivate")
 object ZipUtils {
 object ZipUtils {
 
 
-    fun zipString(text: String): ByteArray {
+    fun zipByteArray(byteArray: ByteArray): ByteArray {
         val byteOut = ByteArrayOutputStream()
         val byteOut = ByteArrayOutputStream()
         val zip = GZIPOutputStream(byteOut)
         val zip = GZIPOutputStream(byteOut)
         zip.use {
         zip.use {
-            it.write(text.toByteArray())
+            it.write(byteArray)
         }
         }
         return byteOut.use {
         return byteOut.use {
             it.toByteArray()
             it.toByteArray()
         }
         }
     }
     }
 
 
+    fun zipString(text: String): ByteArray {
+        return zipByteArray(text.toByteArray())
+    }
+
     /**
     /**
      * Zip the files.
      * Zip the files.
      *
      *