我有一个需要获取远程文件的微服务,并将其上传到S3存储桶。远程文件显示为下载链接,需要基本身份验证。
使用最新的AWS 2.0 SDK我试图流式传输文件,因此不必先将所有文件下载到服务器。文件可以是90kb - >的任何地方。 100GB +。
使用Spring Boot 2.0,我无法找到新的WebClient中是否有支持来处理这个问题,所以我试图破解一些东西,例如:
public Mono<String> upload(@PathVariable String projectId, @RequestBody String downloadLink) {
try {
String authString = properties.getSilverstripe().getUsername() + ":" + properties.getSilverstripe().getToken();
// Download link needs to be cleaned a little;
URL url = new URL(downloadLink.replaceAll("\"", ""));
URLConnection urlConnection = url.openConnection();
// Add basic authentication to the stream
urlConnection.setRequestProperty("Authorization", "Basic " + new String(Base64.encodeBase64(authString.getBytes())));
InputStream inputStream = urlConnection.getInputStream();
// Attempt to create a input stream and upload to the bucket
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
Stream<String> stream = reader.lines();
{
stream.forEach(part -> {
S3AsyncClient client = S3AsyncClient.create();
client.putObject(
PutObjectRequest.builder()
.bucket(BUCKET)
.key(projectId + "/" + LocalDate.now() + ".sspak")
.build(),
AsyncRequestProvider.fromString(part)
);
});
}
return Mono.just(downloadLink);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
我希望有一个非常标准的库/模式来做这个,但我找不到很多在线。
任何帮助都表示赞赏。