Shamrock: Sofitu pa unviar ficheros con nomes personalizaos

This commit is contained in:
WhiteChi 2023-11-10 21:42:29 +08:00
parent 0fb2eeb2d8
commit 08bce05c66
2 changed files with 13 additions and 4 deletions

View File

@ -15,6 +15,7 @@ import moe.fuqiuluo.shamrock.utils.MD5
internal object DownloadFile: IActionHandler() { internal object DownloadFile: IActionHandler() {
override suspend fun internalHandle(session: ActionSession): String { override suspend fun internalHandle(session: ActionSession): String {
val url = session.getStringOrNull("url") val url = session.getStringOrNull("url")
val name = session.getStringOrNull("name")
val b64 = session.getStringOrNull("base64") val b64 = session.getStringOrNull("base64")
val threadCnt = session.getIntOrNull("thread_cnt") ?: 3 val threadCnt = session.getIntOrNull("thread_cnt") ?: 3
val headers = if (session.has("headers")) (if (session.isArray("headers")) { val headers = if (session.has("headers")) (if (session.isArray("headers")) {
@ -24,7 +25,7 @@ internal object DownloadFile: IActionHandler() {
} else { } else {
session.getString("headers").split("\r\n") session.getString("headers").split("\r\n")
}) else emptyList() }) else emptyList()
return invoke(url, b64, threadCnt, headers, session.echo) return invoke(url, b64, threadCnt, headers, name, session.echo)
} }
suspend operator fun invoke( suspend operator fun invoke(
@ -32,6 +33,7 @@ internal object DownloadFile: IActionHandler() {
base64: String?, base64: String?,
threadCnt: Int, threadCnt: Int,
headers: List<String>, headers: List<String>,
name: String?,
echo: JsonElement = EmptyJsonString echo: JsonElement = EmptyJsonString
): String { ): String {
if (url != null) { if (url != null) {
@ -47,7 +49,7 @@ internal object DownloadFile: IActionHandler() {
} }
return invoke(url, threadCnt, headerMap, echo) return invoke(url, threadCnt, headerMap, echo)
} else if (base64 != null) { } else if (base64 != null) {
return invoke(base64, echo) return invoke(base64, name, echo)
} else { } else {
return noParam("url/base64", echo) return noParam("url/base64", echo)
} }
@ -55,6 +57,7 @@ internal object DownloadFile: IActionHandler() {
operator fun invoke( operator fun invoke(
base64: String, base64: String,
name: String?,
echo: JsonElement echo: JsonElement
): String { ): String {
kotlin.runCatching { kotlin.runCatching {
@ -63,7 +66,12 @@ internal object DownloadFile: IActionHandler() {
it.writeBytes(bytes) it.writeBytes(bytes)
} }
}.onSuccess { }.onSuccess {
val tmp = FileUtils.renameByMd5(it) val tmp = if (name == null)
FileUtils.renameByMd5(it)
else it.parentFile!!.resolve(name).also { target ->
it.renameTo(target)
it.delete()
}
return ok(data = DownloadResult( return ok(data = DownloadResult(
file = tmp.absolutePath, file = tmp.absolutePath,
md5 = MD5.genFileMd5Hex(tmp.absolutePath) md5 = MD5.genFileMd5Hex(tmp.absolutePath)

View File

@ -43,9 +43,10 @@ fun Routing.otherAction() {
getOrPost("/download_file") { getOrPost("/download_file") {
val url = fetchOrNull("url") val url = fetchOrNull("url")
val b64 = fetchOrNull("base64") val b64 = fetchOrNull("base64")
val name = fetchOrNull("name")
val threadCnt = fetchOrNull("thread_cnt")?.toInt() ?: 0 val threadCnt = fetchOrNull("thread_cnt")?.toInt() ?: 0
val headers = fetchOrNull("headers") ?: "" val headers = fetchOrNull("headers") ?: ""
call.respondText(DownloadFile(url, b64, threadCnt, headers.split("\r\n"))) call.respondText(DownloadFile(url, b64, threadCnt, headers.split("\r\n"), name))
} }
post("/upload_file") { post("/upload_file") {