如何从url下载文件而不将其保存到磁盘?

时间:2019-02-28 10:12:53

标签: java amazon-s3

我正在尝试从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存储桶而不将其保存到磁盘的方法。我什至不知道这是否是更好的方法,但似乎比将某些内容保存到磁盘上更干净的解决方案。

我也对其他方法持开放态度。谢谢!

1 个答案:

答案 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()));