project-mirai / mirai-api-http

Mirai HTTP API (console) plugin
GNU Affero General Public License v3.0
1.66k stars 343 forks source link

上传文件返回Request body has already been consumed (received). #541

Closed MCQTSS closed 2 years ago

MCQTSS commented 2 years ago

上传文件时返回{'code': 500, 'msg': 'Request body has already been consumed (received).'}并报错 2022-02-04 12:09:34 E/MAH Access: io.ktor.request.RequestAlreadyConsumedException: Request body has already been consumed (received). io.ktor.request.RequestAlreadyConsumedException: Request body has already been consumed (received). at io.ktor.request.ApplicationReceiveFunctionsKt.receive(ApplicationReceiveFunctions.kt:120) at net.mamoe.mirai.api.http.adapter.http.router.FileKt$fileRouter$1$$special$$inlined$httpAuthedMultiPart$1$1.invokeSuspend(dsl.kt:207) at net.mamoe.mirai.api.http.adapter.http.router.FileKt$fileRouter$1$$special$$inlined$httpAuthedMultiPart$1$1.invoke(dsl.kt) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:248) at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:116) at io.ktor.util.pipeline.SuspendFunctionGun.execute(SuspendFunctionGun.kt:136) at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:78) at io.ktor.routing.Routing.executeResult(Routing.kt:155) at io.ktor.routing.Routing.interceptor(Routing.kt:39) at io.ktor.routing.Routing$Feature$install$1.invokeSuspend(Routing.kt:107) at io.ktor.routing.Routing$Feature$install$1.invoke(Routing.kt) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:248) at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:116) at net.mamoe.mirai.api.http.adapter.http.feature.auth.Authorization$install$1.invokeSuspend(Authorization.kt:41) at net.mamoe.mirai.api.http.adapter.http.feature.auth.Authorization$install$1.invoke(Authorization.kt) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:248) at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:116) at net.mamoe.mirai.api.http.adapter.http.feature.handler.HttpRouterAccessHandler.intercept(HttpRouterAccessHandler.kt:36) at net.mamoe.mirai.api.http.adapter.http.feature.handler.HttpRouterAccessHandler.access$intercept(HttpRouterAccessHandler.kt:25) at net.mamoe.mirai.api.http.adapter.http.feature.handler.HttpRouterAccessHandler$Feature$install$1.invokeSuspend(HttpRouterAccessHandler.kt:91) at net.mamoe.mirai.api.http.adapter.http.feature.handler.HttpRouterAccessHandler$Feature$install$1.invoke(HttpRouterAccessHandler.kt) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:248) at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:116) at io.ktor.util.pipeline.SuspendFunctionGun.execute(SuspendFunctionGun.kt:136) at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:78) at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invokeSuspend(DefaultEnginePipeline.kt:124) at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invoke(DefaultEnginePipeline.kt) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:248) at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:116) at io.ktor.util.pipeline.SuspendFunctionGun.execute(SuspendFunctionGun.kt:136) at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:78) at io.ktor.server.cio.CIOApplicationEngine$handleRequest$2.invokeSuspend(CIOApplicationEngine.kt:192) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665) 上传写法: def upload_file(self, target, path): post = { "sessionKey": self.sessionKey, 'type': 'group', 'target': target, 'path': '', 'file': path } return json.loads(requests.post(url=self.url + '/file/upload', data=post, headers={'Accept': 'multipart/form-data'}).text)

nepsyn commented 2 years ago

参考 #493 的写法