From 5bbd453d9ffc65ecabdff84b0abc3ca101d46e3f Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 11 Aug 2021 23:27:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 6 +-- .../assets/web/uploadBook/js/html5_fun.js | 1 - .../app/api/controller/BookController.kt | 54 ++++++++++--------- .../main/java/io/legado/app/web/HttpServer.kt | 4 +- 4 files changed, 35 insertions(+), 30 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 58ce975d7..ca3acdd55 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -193,9 +193,9 @@ dependencies { implementation('com.github.bumptech.glide:glide:4.12.0') //webServer - implementation('org.nanohttpd:nanohttpd:2.3.1') - implementation('org.nanohttpd:nanohttpd-websocket:2.3.1') - implementation('org.nanohttpd:nanohttpd-apache-fileupload:2.3.1') + def nanoHttpdVersion = "2.3.1" + implementation("org.nanohttpd:nanohttpd:$nanoHttpdVersion") + implementation("org.nanohttpd:nanohttpd-websocket:$nanoHttpdVersion") //二维码 implementation('com.github.jenly1314:zxing-lite:2.1.1') diff --git a/app/src/main/assets/web/uploadBook/js/html5_fun.js b/app/src/main/assets/web/uploadBook/js/html5_fun.js index 53b8c3314..929515fad 100644 --- a/app/src/main/assets/web/uploadBook/js/html5_fun.js +++ b/app/src/main/assets/web/uploadBook/js/html5_fun.js @@ -126,7 +126,6 @@ try { var fd = new FormData(); fd.append("Filename", file.name); fd.append("Filedata", file); - fd.append("Upload", "Submit Query"); //设置当前的上传对象 currUploadfile = file; diff --git a/app/src/main/java/io/legado/app/api/controller/BookController.kt b/app/src/main/java/io/legado/app/api/controller/BookController.kt index 509bd2e6e..4de2b34d6 100644 --- a/app/src/main/java/io/legado/app/api/controller/BookController.kt +++ b/app/src/main/java/io/legado/app/api/controller/BookController.kt @@ -1,7 +1,6 @@ package io.legado.app.api.controller import androidx.core.graphics.drawable.toBitmap -import fi.iki.elonen.NanoFileUpload import fi.iki.elonen.NanoHTTPD import io.legado.app.R import io.legado.app.api.ReturnData @@ -19,8 +18,8 @@ import io.legado.app.service.help.ReadBook import io.legado.app.ui.widget.image.CoverImageView import io.legado.app.utils.* import kotlinx.coroutines.runBlocking -import org.apache.commons.fileupload.disk.DiskFileItemFactory import splitties.init.appCtx +import java.io.FileOutputStream object BookController { @@ -193,32 +192,37 @@ object BookController { } } - private val uploader by lazy { - val dif = DiskFileItemFactory(0, LocalBook.cacheFolder) - NanoFileUpload(dif) - } - - fun addLocalBook(session: NanoHTTPD.IHTTPSession, postData: String?): ReturnData { + fun addLocalBook(session: NanoHTTPD.IHTTPSession): ReturnData { val returnData = ReturnData() try { - uploader.parseRequest(session).forEach { - val path = FileUtils.getPath(LocalBook.cacheFolder, it.name) - val nameAuthor = LocalBook.analyzeNameAuthor(it.name) - val book = Book( - bookUrl = path, - name = nameAuthor.first, - author = nameAuthor.second, - originName = it.name, - coverUrl = FileUtils.getPath( - appCtx.externalFiles, - "covers", - "${MD5Utils.md5Encode16(path)}.jpg" - ) - ) - if (book.isEpub()) EpubFile.upBookInfo(book) - if (book.isUmd()) UmdFile.upBookInfo(book) - appDb.bookDao.insert(book) + val fileName = session.parameters["file"]?.firstOrNull() + val contentLength = session.headers["content-length"]?.toInt() + fileName ?: let { + return returnData.setErrorMsg("文件名为空") } + contentLength ?: let { + return returnData.setErrorMsg("文件长度为空") + } + val file = FileUtils.createFileIfNotExist(LocalBook.cacheFolder, fileName) + val outputStream = FileOutputStream(file) + session.inputStream.copyTo(outputStream, contentLength) + outputStream.close() + session.inputStream.close() + val nameAuthor = LocalBook.analyzeNameAuthor(fileName) + val book = Book( + bookUrl = file.absolutePath, + name = nameAuthor.first, + author = nameAuthor.second, + originName = fileName, + coverUrl = FileUtils.getPath( + appCtx.externalFiles, + "covers", + "${MD5Utils.md5Encode16(file.absolutePath)}.jpg" + ) + ) + if (book.isEpub()) EpubFile.upBookInfo(book) + if (book.isUmd()) UmdFile.upBookInfo(book) + appDb.bookDao.insert(book) } catch (e: Exception) { e.printStackTrace() return returnData.setErrorMsg( diff --git a/app/src/main/java/io/legado/app/web/HttpServer.kt b/app/src/main/java/io/legado/app/web/HttpServer.kt index dd8071b95..c89f6a60d 100644 --- a/app/src/main/java/io/legado/app/web/HttpServer.kt +++ b/app/src/main/java/io/legado/app/web/HttpServer.kt @@ -18,6 +18,8 @@ class HttpServer(port: Int) : NanoHTTPD(port) { override fun serve(session: IHTTPSession): Response { var returnData: ReturnData? = null + val ct = ContentType(session.headers["content-type"]).tryUTF8() + session.headers["content-type"] = ct.contentTypeHeader var uri = session.uri try { @@ -40,7 +42,7 @@ class HttpServer(port: Int) : NanoHTTPD(port) { "/saveSources" -> SourceController.saveSources(postData) "/saveBook" -> BookController.saveBook(postData) "/deleteSources" -> SourceController.deleteSources(postData) - "/addLocalBook" -> BookController.addLocalBook(session, postData) + "/addLocalBook" -> BookController.addLocalBook(session) else -> null } }