load images from local cache
This commit is contained in:
@@ -94,7 +94,12 @@ public class JSONLoader implements Serializable {
|
|||||||
medium.setDescription(mediumJsonObject.getString("description"));
|
medium.setDescription(mediumJsonObject.getString("description"));
|
||||||
}
|
}
|
||||||
medium.setMediumUrl(mediumJsonObject.getString("preview_url"));
|
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);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,11 +19,25 @@
|
|||||||
</init-param>
|
</init-param>
|
||||||
</servlet>
|
</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-mapping>
|
||||||
<servlet-name>FediServlet</servlet-name>
|
<servlet-name>FediServlet</servlet-name>
|
||||||
<url-pattern></url-pattern>
|
<url-pattern></url-pattern>
|
||||||
</servlet-mapping>
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>ProxyServlet</servlet-name>
|
||||||
|
<url-pattern>/cache/*</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
<welcome-file-list>
|
<welcome-file-list>
|
||||||
<welcome-file></welcome-file>
|
<welcome-file></welcome-file>
|
||||||
</welcome-file-list>
|
</welcome-file-list>
|
||||||
|
|||||||
Reference in New Issue
Block a user