load images from local cache

This commit is contained in:
2025-09-25 15:33:26 +02:00
parent ef5abc3096
commit 9edefa0f6b
3 changed files with 107 additions and 1 deletions
@@ -94,7 +94,12 @@ public class JSONLoader implements Serializable {
medium.setDescription(mediumJsonObject.getString("description"));
}
medium.setMediumUrl(mediumJsonObject.getString("preview_url"));
medium.setMediumImage(mediumJsonObject.getString("url"));
final String imageUrl = mediumJsonObject.getString("url");
if (imageUrl != null && imageUrl.startsWith("https://")) {
medium.setMediumImage(contextUrl + "cache" + imageUrl.substring(7));
} else {
medium.setMediumImage(imageUrl);
}
post.addFediMedium(medium);
}
}
@@ -0,0 +1,87 @@
package de.jalin.fedipage;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class ProxyServlet extends HttpServlet {
private static final long serialVersionUID = 6847934676281057148L;
private String cacheDirectory;
@Override
public void init() throws ServletException {
final ServletConfig servletConfig = getServletConfig();
try {
String cache = servletConfig.getInitParameter("cache");
if (cache != null) {
cacheDirectory = Path.of(cache).toString();
} else {
cacheDirectory = Files.createTempDirectory("cache").toString();
}
} catch (IOException e) {
throw new ServletException(e);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
final String resource = request.getPathInfo();
final Path resourcePath = Path.of(cacheDirectory + resource);
final File file = resourcePath.toFile();
if (file.exists()) {
final BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
final BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
final byte[] bytesBuffer = new byte[4096];
int readBytes = bufferedInputStream.read(bytesBuffer);
while (readBytes > 0) {
bufferedOutputStream.write(bytesBuffer, 0, readBytes);
readBytes = bufferedInputStream.read(bytesBuffer);
}
bufferedOutputStream.close();
bufferedInputStream.close();
} else {
try {
file.getParentFile().mkdirs();
file.createNewFile();
final URI uri = new URI("https:/" + resource);
final URL url = uri.toURL();
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
final BufferedInputStream bufferedInputStream = new BufferedInputStream(connection.getInputStream());
final BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
final BufferedOutputStream fileOutputStream = new BufferedOutputStream(new FileOutputStream(file));
final byte[] bytesBuffer = new byte[4096];
int readBytes = bufferedInputStream.read(bytesBuffer);
while (readBytes > 0) {
bufferedOutputStream.write(bytesBuffer, 0, readBytes);
fileOutputStream.write(bytesBuffer, 0, readBytes);
readBytes = bufferedInputStream.read(bytesBuffer);
}
bufferedOutputStream.close();
fileOutputStream.close();
bufferedInputStream.close();
connection.disconnect();
} catch (URISyntaxException e) {
throw new ServletException(e);
}
}
}
}
+14
View File
@@ -19,11 +19,25 @@
</init-param>
</servlet>
<servlet>
<servlet-name>ProxyServlet</servlet-name>
<servlet-class>de.jalin.fedipage.ProxyServlet</servlet-class>
<init-param>
<param-name>cache</param-name>
<param-value>temp/fedicache</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>FediServlet</servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ProxyServlet</servlet-name>
<url-pattern>/cache/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file></welcome-file>
</welcome-file-list>