pull/1238/head^2
gedoor 4 years ago
parent a8c843a32c
commit 5bbd453d9f
  1. 6
      app/build.gradle
  2. 1
      app/src/main/assets/web/uploadBook/js/html5_fun.js
  3. 34
      app/src/main/java/io/legado/app/api/controller/BookController.kt
  4. 4
      app/src/main/java/io/legado/app/web/HttpServer.kt

@ -193,9 +193,9 @@ dependencies {
implementation('com.github.bumptech.glide:glide:4.12.0') implementation('com.github.bumptech.glide:glide:4.12.0')
//webServer //webServer
implementation('org.nanohttpd:nanohttpd:2.3.1') def nanoHttpdVersion = "2.3.1"
implementation('org.nanohttpd:nanohttpd-websocket:2.3.1') implementation("org.nanohttpd:nanohttpd:$nanoHttpdVersion")
implementation('org.nanohttpd:nanohttpd-apache-fileupload:2.3.1') implementation("org.nanohttpd:nanohttpd-websocket:$nanoHttpdVersion")
// //
implementation('com.github.jenly1314:zxing-lite:2.1.1') implementation('com.github.jenly1314:zxing-lite:2.1.1')

@ -126,7 +126,6 @@ try {
var fd = new FormData(); var fd = new FormData();
fd.append("Filename", file.name); fd.append("Filename", file.name);
fd.append("Filedata", file); fd.append("Filedata", file);
fd.append("Upload", "Submit Query");
//设置当前的上传对象 //设置当前的上传对象
currUploadfile = file; currUploadfile = file;

@ -1,7 +1,6 @@
package io.legado.app.api.controller package io.legado.app.api.controller
import androidx.core.graphics.drawable.toBitmap import androidx.core.graphics.drawable.toBitmap
import fi.iki.elonen.NanoFileUpload
import fi.iki.elonen.NanoHTTPD import fi.iki.elonen.NanoHTTPD
import io.legado.app.R import io.legado.app.R
import io.legado.app.api.ReturnData 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.ui.widget.image.CoverImageView
import io.legado.app.utils.* import io.legado.app.utils.*
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.apache.commons.fileupload.disk.DiskFileItemFactory
import splitties.init.appCtx import splitties.init.appCtx
import java.io.FileOutputStream
object BookController { object BookController {
@ -193,32 +192,37 @@ object BookController {
} }
} }
private val uploader by lazy { fun addLocalBook(session: NanoHTTPD.IHTTPSession): ReturnData {
val dif = DiskFileItemFactory(0, LocalBook.cacheFolder)
NanoFileUpload(dif)
}
fun addLocalBook(session: NanoHTTPD.IHTTPSession, postData: String?): ReturnData {
val returnData = ReturnData() val returnData = ReturnData()
try { try {
uploader.parseRequest(session).forEach { val fileName = session.parameters["file"]?.firstOrNull()
val path = FileUtils.getPath(LocalBook.cacheFolder, it.name) val contentLength = session.headers["content-length"]?.toInt()
val nameAuthor = LocalBook.analyzeNameAuthor(it.name) 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( val book = Book(
bookUrl = path, bookUrl = file.absolutePath,
name = nameAuthor.first, name = nameAuthor.first,
author = nameAuthor.second, author = nameAuthor.second,
originName = it.name, originName = fileName,
coverUrl = FileUtils.getPath( coverUrl = FileUtils.getPath(
appCtx.externalFiles, appCtx.externalFiles,
"covers", "covers",
"${MD5Utils.md5Encode16(path)}.jpg" "${MD5Utils.md5Encode16(file.absolutePath)}.jpg"
) )
) )
if (book.isEpub()) EpubFile.upBookInfo(book) if (book.isEpub()) EpubFile.upBookInfo(book)
if (book.isUmd()) UmdFile.upBookInfo(book) if (book.isUmd()) UmdFile.upBookInfo(book)
appDb.bookDao.insert(book) appDb.bookDao.insert(book)
}
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
return returnData.setErrorMsg( return returnData.setErrorMsg(

@ -18,6 +18,8 @@ class HttpServer(port: Int) : NanoHTTPD(port) {
override fun serve(session: IHTTPSession): Response { override fun serve(session: IHTTPSession): Response {
var returnData: ReturnData? = null var returnData: ReturnData? = null
val ct = ContentType(session.headers["content-type"]).tryUTF8()
session.headers["content-type"] = ct.contentTypeHeader
var uri = session.uri var uri = session.uri
try { try {
@ -40,7 +42,7 @@ class HttpServer(port: Int) : NanoHTTPD(port) {
"/saveSources" -> SourceController.saveSources(postData) "/saveSources" -> SourceController.saveSources(postData)
"/saveBook" -> BookController.saveBook(postData) "/saveBook" -> BookController.saveBook(postData)
"/deleteSources" -> SourceController.deleteSources(postData) "/deleteSources" -> SourceController.deleteSources(postData)
"/addLocalBook" -> BookController.addLocalBook(session, postData) "/addLocalBook" -> BookController.addLocalBook(session)
else -> null else -> null
} }
} }

Loading…
Cancel
Save