如何将带有子文件夹的文件夹上传到亚马逊 s3?

Posted

技术标签:

【中文标题】如何将带有子文件夹的文件夹上传到亚马逊 s3?【英文标题】:How to upload folder with subfolder to amazon s3? 【发布时间】:2013-02-11 23:33:57 【问题描述】:

我需要在 amazon s3 上上传带有子文件夹的文件夹。我尝试使用此片段上传。

    for (Path path : directoryWalk("/home/rmuhamedgaliev/tmp/eota7tas0cdlg2ufq5mlke7olf/"))
       if (!path.getParent().toString().equals("eota7tas0cdlg2ufq5mlke7olf"))
        amazonS3Client.putObject("*****", "/plans/eota7tas0cdlg2ufq5mlke7olf/" + path.getParent().toString() + "/" + path.getFileName(), new File(path.toString()));
        else 
        amazonS3Client.putObject("*******", "/plans/eota7tas0cdlg2ufq5mlke7olf/" + path.getFileName(), new File(path.toString()));
       
    

但此代码使用 ("/home/rmuhamedgaliev/tmp/eota7tas0cdlg2ufq5mlke7olf") 创建完整路径文件。如何使用路径上传它("/plans/eota7tas0cdlg2ufq5mlke7olf/subfolders and files")

    private List<Path> directoryWalk(String path) throws IOException 
        final List<Path> files = new ArrayList<>();
        Files.walkFileTree(Paths.get(path), new SimpleFileVisitor<Path>() 

            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException 
                files.add(file);
                return FileVisitResult.CONTINUE;
            
        );
        return files;
    

【问题讨论】:

【参考方案1】:

您是否查看过适用于 Java 的 AWS 开发工具包中的 TransferManager?您可以为此使用uploadDirectory 方法。 javadoc 是here。本质上,你可以这样做:

transferManager.uploadDirectory(bucketName, "plans/eota7tas0cdlg2ufq5mlke7olf/", new File("/home/rmuhamedgaliev/tmp/eota7tas0cdlg2ufq5mlke7olf/"), true);

【讨论】:

获取 TransferManger 的建议方法是使用 TransferManagerBuilder.defaultTransferManager()【参考方案2】:

我自己写的。

        List<File> files = new LinkedList<File>();
        listFiles(new File("/home/rmuhamedgaliev/tmp/eota7tas0cdlg2ufq5mlke7olf"), files, true);
        for (File f : files) 
            String key = f.getAbsolutePath().substring(new File("/home/rmuhamedgaliev/tmp/eota7tas0cdlg2ufq5mlke7olf").getAbsolutePath().length() + 1)
                .replaceAll("\\\\", "/");
            amazonS3Client.putObject("****", "plans/eota7tas0cdlg2ufq5mlke7olf/" + key, f);
        

【讨论】:

我想上传单个文件夹中存在的所有文件,例如假设我有文件夹名称“TestMech”,其中包含我需要在进度指示器的帮助下上传的所有照片的数量可能以及如何

以上是关于如何将带有子文件夹的文件夹上传到亚马逊 s3?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Codeigniter/PHP 将文件上传到亚马逊 S3?

vue express将多个文件上传到亚马逊s3

在 react-native 中将图像上传到亚马逊 s3

PgSQL - 将选择查询数据直接导出到带有标题的亚马逊 s3

如何将画布数据 uri 上传到亚马逊 s3 服务器

如何使用 django-storages 将图像上传到亚马逊 S3?在管理员中上传有效,但在网站表单中无效