remote SMTP from docker compose

This commit is contained in:
Daniel
2024-12-13 15:25:01 +02:00
parent 51d3c01c3e
commit 5d0160e6c9
2 changed files with 100 additions and 3 deletions

View File

@@ -1,13 +1,17 @@
package io.github.lumijiez.ftp;
import io.github.lumijiez.Main;
import io.github.lumijiez.http.AddressHolder;
import org.apache.commons.net.ftp.FTPClient;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;
public class FTPFetcher {
String ftpServer = "ftp_server";
@@ -53,6 +57,12 @@ public class FTPFetcher {
boolean success = ftpClient.retrieveFile(fileName, fos);
if (success) {
Main.logger.info("File downloaded: {}", localFile.getName());
sendFileToMultipartEndpoint(localFile,
"http://"
+ AddressHolder.getInstance().getHost()
+ ":" + AddressHolder.getInstance().getPort()
+ "/upload", "Description of " + fileName);
} else {
Main.logger.error("Failed to download the file: {}", fileName);
}
@@ -78,4 +88,68 @@ public class FTPFetcher {
}
}
}
private static void sendFileToMultipartEndpoint(File file, String endpointUrl, String description) {
try {
String boundary = UUID.randomUUID().toString();
HttpURLConnection connection = (HttpURLConnection) new URL(endpointUrl).openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
try (OutputStream outputStream = connection.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8), true)) {
writer.append("--").append(boundary).append("\r\n");
writer.append("Content-Disposition: form-data; name=\"description\"\r\n");
writer.append("Content-Type: text/plain; charset=UTF-8\r\n\r\n");
writer.append(description).append("\r\n");
writer.append("--").append(boundary).append("\r\n");
writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"")
.append(file.getName()).append("\"\r\n");
writer.append("Content-Type: application/octet-stream\r\n\r\n");
writer.flush();
try (FileInputStream fileInputStream = new FileInputStream(file)) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
writer.append("\r\n--").append(boundary).append("--\r\n");
writer.flush();
}
int responseCode = connection.getResponseCode();
if (responseCode == 200) {
System.out.println("File successfully uploaded to the endpoint " + AddressHolder.getInstance().getHost() + ":" + AddressHolder.getInstance().getPort() + ": " + file.getName());
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
System.out.println("Server response: " + response);
}
} else {
try (BufferedReader errorReader = new BufferedReader(new InputStreamReader(connection.getErrorStream()))) {
String line;
StringBuilder errorResponse = new StringBuilder();
while ((line = errorReader.readLine()) != null) {
errorResponse.append(line);
}
System.err.println("Failed to upload file. Response code: " + responseCode);
System.err.println("Error details: " + errorResponse);
}
}
} catch (IOException e) {
e.printStackTrace();
System.err.println("Error sending file to endpoint: " + e.getMessage());
}
}
}