halo-dev / halo

强大易用的开源建站工具。
https://www.halo.run
GNU General Public License v3.0
33.2k stars 9.59k forks source link

Alist 附件存储策略文章上传失败 #6455

Closed la02w closed 1 month ago

la02w commented 1 month ago

系统信息

使用的哪种方式运行?

Docker Compose

发生了什么?

使用alist插件添加存储策略后,选择附件存储策略后,编辑文章时用编辑器粘贴图片上传失败。

复现步骤

1.添加alist存储策略 image 2.设置文章附件存储策略 image 3.编辑文章复制图片进去报错 image

相关日志输出

halo-1    | 2024-08-09T17:46:10.194+08:00  INFO 7 --- [or-http-epoll-4] r.h.a.endpoint.AListAttachmentHandler    : [AList Info] :  Upload file file successfully
halo-1    | 2024-08-09T17:46:10.198+08:00 ERROR 7 --- [or-http-epoll-4] a.w.r.e.AbstractErrorWebExceptionHandler : [142b7208-1846]  500 Server Error for HTTP POST "/apis/uc.api.content.halo.run/v1alpha1/attachments?waitForPermalink=true"
halo-1    |
halo-1    | java.lang.ClassCastException: org.springframework.http.codec.multipart.DefaultParts$DefaultFilePart incompatible with run.halo.app.core.extension.attachment.endpoint.SimpleFilePart
halo-1    |     at run.halo.alist.endpoint.AListAttachmentHandler.lambda$upload$5(AListAttachmentHandler.java:125) ~[na:na]
halo-1    |     Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
halo-1    | Error has been observed at the following site(s):
halo-1    |     *__checkpoint ⇢ Handler run.halo.app.endpoint.uc.content.UcPostAttachmentEndpoint$$Lambda/0x000000008ee13840@eb7dc3df [DispatcherHandler]
halo-1    |     *__checkpoint ⇢ run.halo.app.security.InitializeRedirectionWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ run.halo.app.security.device.DeviceSessionFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ SecurityWebFilterChainProxy [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ AuthorizationWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ ExceptionTranslationWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ LogoutWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ ServerRequestCacheWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ LogoutPageGeneratingWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ AnonymousAuthenticationWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ SecurityWebFilterChainProxy [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ TotpAuthenticationFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ AuthenticationWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ SecurityWebFilterChainProxy [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ AuthenticationWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ SecurityWebFilterChainProxy [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ AuthenticationWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ AuthenticationWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ ReactorContextWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ CsrfWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ CorsWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ HttpHeaderWriterWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ SecurityWebFilterChainProxy [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ run.halo.comment.widget.captcha.CommentCaptchaFilter [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ run.halo.app.webfilter.AdditionalWebFilterChainProxy [DefaultWebFilterChain]
halo-1    |     *__checkpoint ⇢ HTTP POST "/apis/uc.api.content.halo.run/v1alpha1/attachments?waitForPermalink=true" [ExceptionHandlingWebHandler]
halo-1    | Original Stack Trace:
halo-1    |             at run.halo.alist.endpoint.AListAttachmentHandler.lambda$upload$5(AListAttachmentHandler.java:125) ~[na:na]
halo-1    |             at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:158) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:158) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:337) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2097) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:145) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144) ~[reactor-core-3.6.7.jar:3.6.7]
halo-1    |             at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:415) ~[reactor-netty-core-1.1.20.jar:1.1.20]
halo-1    |             at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:446) ~[reactor-netty-core-1.1.20.jar:1.1.20]
halo-1    |             at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:500) ~[reactor-netty-core-1.1.20.jar:1.1.20]
halo-1    |             at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:793) ~[reactor-netty-http-1.1.20.jar:1.1.20]
halo-1    |             at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:114) ~[reactor-netty-core-1.1.20.jar:1.1.20]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:289) ~[netty-handler-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) ~[netty-codec-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) ~[netty-codec-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1473) ~[netty-handler-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1336) ~[netty-handler-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1385) ~[netty-handler-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530) ~[netty-codec-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469) ~[netty-codec-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) ~[netty-codec-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1407) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799) ~[netty-transport-classes-epoll-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:501) ~[netty-transport-classes-epoll-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:399) ~[netty-transport-classes-epoll-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994) ~[netty-common-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.111.Final.jar:4.1.111.Final]
halo-1    |             at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
halo-1    |

附加信息

No response

JohnNiang commented 1 month ago

Hi @huajiba , thank you for reaching out here!

该问题应该属于 Alist 插件,我将关闭当前 Issue,并在 https://github.com/halo-sigs/plugin-alist/issues/8 中回复。

/close /triage duplicate

f2c-ci-robot[bot] commented 1 month ago

@JohnNiang: Closing this issue.

In response to [this](https://github.com/halo-dev/halo/issues/6455#issuecomment-2285481287): >Hi @huajiba , thank you for reaching out here! > >该问题应该属于 [Alist 插件](https://github.com/halo-sigs/plugin-alist),我将关闭当前 Issue,并在 https://github.com/halo-sigs/plugin-alist/issues/8 中回复。 > >/close >/triage duplicate Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md). If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.