我正在尝试从URL下载文件并将其上传到AWS中的S3存储桶。到目前为止,我最好的方法是将文件保存到磁盘中的temp文件夹中,并在将其上传到S3存储桶后将其删除。
这是我的方法:
private File downloadFileFromUrl(String fileUrlToUpload) {
try {
URL url = new URL(fileUrlToUpload);
String tempDir = System.getProperty("java.io.tmpdir");
File file = new File(tempDir + FilenameUtils.getName(url.getPath()));
FileUtils.copyURLToFile(url, file);
return file;
} catch (IOException e) {
LOGGER.error("Could not download file from: {}!", fileUrlToUpload);
return null;
}
}
然后将文件上传到调用 downloadFileFromUrl 方法的服务中,然后将其删除。
但是,我正在寻找一种从url下载文件并将其直接上传到S3存储桶而不将其保存到磁盘的方法。我什至不知道这是否是更好的方法,但似乎比将某些内容保存到磁盘上更干净的解决方案。
我也对其他方法持开放态度。谢谢!
答案 0 :(得分:2)
在这种情况下,最好的方法可能是使用AWS Signed URL上传和下载文件-而不是充当代理。
如果您坚持要自己下载文件,则可以执行以下操作:
BufferedInputStream bufferedInputStream = new BufferedInputStream(url.openStream());
StringBuilder sb = new StringBuilder();
byte[] buffer = new byte[1024];
while ((buffer = bufferedInputStream.read(buffer)) != -1) {
sb.append(new String(buffer));
}
sb
-包含文件的内容。
您也可以使用Apache Commons Lang:
IOUtils.toString(new InputStreamReader(url.openStream()));