Skip to content

Commit 9d06473

Browse files
authored
fix: post cover images failing to load due to special characters (#61)
### What this PR does? 修复包含特殊字符的文章封面图无法加载的问题 Fixes #60 ```release-note 修复包含特殊字符的文章封面图无法加载的问题 ```
1 parent 842bb0f commit 9d06473

File tree

3 files changed

+28
-19
lines changed

3 files changed

+28
-19
lines changed

app/src/main/java/run/halo/feed/RelativeLinkProcessor.java

+9-15
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
package run.halo.feed;
22

3+
import static run.halo.feed.RssUtils.genRelativeThumbUri;
4+
35
import com.google.common.base.Throwables;
6+
import java.net.URI;
47
import lombok.extern.slf4j.Slf4j;
58
import org.apache.commons.lang3.StringUtils;
69
import org.jsoup.Jsoup;
710
import org.jsoup.nodes.Element;
811
import org.jsoup.select.Elements;
912
import org.springframework.util.Assert;
1013
import org.springframework.web.util.UriComponentsBuilder;
11-
import org.springframework.web.util.UriUtils;
1214
import run.halo.app.core.attachment.ThumbnailSize;
1315
import run.halo.app.infra.utils.PathUtils;
1416
import run.halo.feed.telemetry.TelemetryEndpoint;
1517

16-
import java.net.URI;
17-
import java.nio.charset.StandardCharsets;
18-
1918
@Slf4j
2019
public class RelativeLinkProcessor {
2120
private final URI externalUri;
@@ -66,8 +65,6 @@ private String doProcessForHtml(String html) {
6665
processElementAttr(embeds, "src", false);
6766

6867
return document.body().html();
69-
// var outputHtml = document.body().html();
70-
// return StringEscapeUtils.unescapeHtml4(outputHtml);
7168
}
7269

7370
private void processElementAttr(Elements elements, String attrKey, boolean canThumb) {
@@ -89,10 +86,7 @@ boolean isNotTelemetryLink(String uri) {
8986
}
9087

9188
private String genThumbUrl(String url, ThumbnailSize size) {
92-
return processLink("/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri="
93-
+ UriUtils.encode(url, StandardCharsets.UTF_8)
94-
+ "&size=" + size.name().toLowerCase()
95-
);
89+
return processLink(genRelativeThumbUri(url, size));
9690
}
9791

9892
private String processLink(String link) {
@@ -101,18 +95,18 @@ private String processLink(String link) {
10195
}
10296
var contextPath = StringUtils.defaultIfBlank(externalUri.getPath(), "/");
10397
var linkUri = UriComponentsBuilder.fromUriString(URI.create(link).toASCIIString())
104-
.build(true);
98+
.build(true);
10599
var builder = UriComponentsBuilder.fromUriString(externalUri.toString());
106100
if (shouldAppendPath(contextPath, link)) {
107101
builder.pathSegment(linkUri.getPathSegments().toArray(new String[0]));
108102
} else {
109103
builder.replacePath(linkUri.getPath());
110104
}
111105
return builder.query(linkUri.getQuery())
112-
.fragment(linkUri.getFragment())
113-
.build(true)
114-
.toUri()
115-
.toString();
106+
.fragment(linkUri.getFragment())
107+
.build(true)
108+
.toUri()
109+
.toString();
116110
}
117111

118112
private static boolean shouldAppendPath(String contextPath, String link) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package run.halo.feed;
2+
3+
import java.nio.charset.StandardCharsets;
4+
import lombok.experimental.UtilityClass;
5+
import org.springframework.web.util.UriUtils;
6+
import run.halo.app.core.attachment.ThumbnailSize;
7+
8+
@UtilityClass
9+
public class RssUtils {
10+
11+
public static String genRelativeThumbUri(String url, ThumbnailSize size) {
12+
return "/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri="
13+
+ UriUtils.encode(url, StandardCharsets.UTF_8)
14+
+ "&size=" + size.name().toLowerCase();
15+
}
16+
}

app/src/main/java/run/halo/feed/provider/AbstractPostRssProvider.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package run.halo.feed.provider;
22

3+
import static run.halo.feed.RssUtils.genRelativeThumbUri;
4+
35
import java.util.List;
46
import java.util.function.Function;
57
import lombok.Data;
@@ -91,10 +93,7 @@ public Mono<RSS2> handler(ServerRequest request) {
9193
}
9294

9395
private String genThumbUrl(String url) {
94-
return externalLinkProcessor.processLink(
95-
"/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=" + url + "&size="
96-
+ ThumbnailSize.M.name().toLowerCase()
97-
);
96+
return externalLinkProcessor.processLink(genRelativeThumbUri(url, ThumbnailSize.M));
9897
}
9998

10099
protected Flux<PostWithContent> listPosts(ServerRequest request) {

0 commit comments

Comments
 (0)