首页 > 解决方案 > 如何从 url 下载文件而不将其保存到磁盘?

问题描述

我正在尝试从 url 下载文件并将它们上传到 AWS 中的 S3 存储桶。到目前为止,我最好的方法是将文件保存到磁盘中的临时文件夹并在将其上传到 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 存储桶而不将其保存到磁盘的方法。我什至不确定这是否是一种更好的方法,但它似乎比将某些内容保存到磁盘更清洁。

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

标签: javaamazon-s3

解决方案


在这种情况下,最好的方法可能是使用AWS 签名 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()));

推荐阅读