package com.dream.appserver.utils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.concurrent.Executors;
@Service
public class FileUpload {
private final HttpClient httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
public void uploadFiles(List<MultipartFile> files, String uploadUrl) {
try(var executor = Executors.newVirtualThreadPerTaskExecutor()) {
files.forEach(file -> {
executor.submit(() -> uploadFile(file, uploadUrl));
});
}
}
private void uploadFile(MultipartFile file, String uploadUrl){
try {
Path path = Files.createTempFile(file.getOriginalFilename(), null);
Files.write(path, file.getBytes());
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(uploadUrl))
.header("Content-Type", "application/octet-stream")
.POST(HttpRequest.BodyPublishers.ofFile(path))
.build();
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
package com.dream.appserver.utils;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List;
import java.util.concurrent.Executors;
@Service
public class FileDownload {
private final HttpClient httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
public void downloadFiles(List<String> downloadUrls, String filePath) {
try(var executor = Executors.newVirtualThreadPerTaskExecutor()){
for(String downloadUrl : downloadUrls){
executor.submit(() -> {
downloadFiles(downloadUrls, filePath);
});
}
}
}
private void downLoadFile(String downloadUrl, String filePath) {
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(downloadUrl))
.header("Content-Type", "application/octet-stream")
.GET()
.build();
HttpResponse<InputStream> response = httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream());
if (response.statusCode() == 200) {
Files.copy(response.body(), Paths.get(filePath), StandardCopyOption.REPLACE_EXISTING);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}