pull/1238/head^2
gedoor 3 years ago
parent 5bbd453d9f
commit e6e6df4fe2
  1. 4
      app/src/main/assets/updateLog.md
  2. 71
      app/src/main/assets/web/uploadBook/js/html5_fun.js
  3. 23
      app/src/main/java/io/legado/app/api/controller/BookController.kt
  4. 2
      app/src/main/java/io/legado/app/web/HttpServer.kt

@ -14,6 +14,10 @@
**2021/08/09** **2021/08/09**
1. web传书可以使用
**2021/08/09**
1. 修复选择文字不能选择单个文字的bug 1. 修复选择文字不能选择单个文字的bug
2. 分组可选择封面 2. 分组可选择封面

@ -123,41 +123,46 @@ try {
//正在上传 //正在上传
isUploading = true; isUploading = true;
//设置上传的数据 //设置上传的数据
var fd = new FormData(); var reader = new FileReader();
fd.append("Filename", file.name); reader.readAsDataURL(file);
fd.append("Filedata", file); reader.onload = function (e) {
//设置当前的上传对象 var data = e.target.result;
currUploadfile = file; var fd = new FormData();
fd.append("fileName", file.name);
if (XHR.readyState > 0) { fd.append("fileData", data);
XHR = new XMLHttpRequest(); //设置当前的上传对象
currUploadfile = file;
if (XHR.readyState > 0) {
XHR = new XMLHttpRequest();
}
XHR.upload.addEventListener("progress", progress, false);
XHR.upload.addEventListener("load", requestLoad, false);
XHR.upload.addEventListener("error", error, false);
XHR.upload.addEventListener("abort", abort, false);
XHR.upload.addEventListener("loadend", loadend, false);
XHR.upload.addEventListener("loadstart", loadstart, false);
XHR.open("POST", config.url);
XHR.send(fd);
XHR.onreadystatechange = function () {
//只要上传完成不管成功失败
if (XHR.readyState == 4) {
console.log("onreadystatechange ", XHR.status, +new Date());
if (XHR.status == 200) {
uploadSuccess(currUploadfile, {}, XHR.status)
} else {
uploadError()
}
//进行下一个上传
nextUpload()
}
};
} }
XHR.upload.addEventListener("progress", progress, false);
XHR.upload.addEventListener("load", requestLoad, false);
XHR.upload.addEventListener("error", error, false);
XHR.upload.addEventListener("abort", abort, false);
XHR.upload.addEventListener("loadend", loadend, false);
XHR.upload.addEventListener("loadstart", loadstart, false);
XHR.open("POST", config.url);
XHR.send(fd);
XHR.onreadystatechange = function () {
//只要上传完成不管成功失败
if (XHR.readyState == 4) {
console.log("onreadystatechange ", XHR.status, +new Date());
if (XHR.status == 200) {
uploadSuccess(currUploadfile, {}, XHR.status)
} else {
uploadError()
}
//进行下一个上传
nextUpload()
}
};
} }
//请求完成,无论失败或成功 //请求完成,无论失败或成功

@ -1,7 +1,7 @@
package io.legado.app.api.controller package io.legado.app.api.controller
import android.util.Base64
import androidx.core.graphics.drawable.toBitmap import androidx.core.graphics.drawable.toBitmap
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
import io.legado.app.constant.PreferKey import io.legado.app.constant.PreferKey
@ -19,7 +19,6 @@ 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 splitties.init.appCtx import splitties.init.appCtx
import java.io.FileOutputStream
object BookController { object BookController {
@ -192,22 +191,16 @@ object BookController {
} }
} }
fun addLocalBook(session: NanoHTTPD.IHTTPSession): ReturnData { fun addLocalBook(parameters: Map<String, List<String>>): ReturnData {
val returnData = ReturnData() val returnData = ReturnData()
try { try {
val fileName = session.parameters["file"]?.firstOrNull() val fileName = parameters["fileName"]?.firstOrNull()
val contentLength = session.headers["content-length"]?.toInt() ?: return returnData.setErrorMsg("fileName 不能为空")
fileName ?: let { val fileData = parameters["fileData"]?.firstOrNull()
return returnData.setErrorMsg("文件名为空") ?: return returnData.setErrorMsg("fileData 不能为空")
}
contentLength ?: let {
return returnData.setErrorMsg("文件长度为空")
}
val file = FileUtils.createFileIfNotExist(LocalBook.cacheFolder, fileName) val file = FileUtils.createFileIfNotExist(LocalBook.cacheFolder, fileName)
val outputStream = FileOutputStream(file) val fileBytes = Base64.decode(fileData.substringAfter("base64,"), Base64.DEFAULT)
session.inputStream.copyTo(outputStream, contentLength) file.writeBytes(fileBytes)
outputStream.close()
session.inputStream.close()
val nameAuthor = LocalBook.analyzeNameAuthor(fileName) val nameAuthor = LocalBook.analyzeNameAuthor(fileName)
val book = Book( val book = Book(
bookUrl = file.absolutePath, bookUrl = file.absolutePath,

@ -42,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) "/addLocalBook" -> BookController.addLocalBook(session.parameters)
else -> null else -> null
} }
} }

Loading…
Cancel
Save