2013-02-26 28 views
5

Tôi cần thư mục tải lên với thư mục con trên amazon s3. Tôi thử tải lên bằng hình thu nhỏ này.Cách tải thư mục với thư mục con lên 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())); 
     } 
    } 

Nhưng mã này tạo ra các file đường dẫn đầy đủ với ("/ home/rmuhamedgaliev/tmp/eota7tas0cdlg2ufq5mlke7olf"). Làm thế nào để tải lên nó với con đường ("/ kế hoạch/eota7tas0cdlg2ufq5mlke7olf/{thư mục con và các tập tin}")

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; 
    } 

Trả lời

12

Bạn đã nhìn TransferManager trong SDK AWS cho Java? Bạn có thể sử dụng phương thức uploadDirectory cho việc này. Javadoc là here. Về bản chất, bạn có thể làm một việc như sau:

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

Tôi viết theo cách của riêng mình.

 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); 
     } 
+0

tôi muốn tải lên tất cả các file mà có mặt trong thư mục duy nhất như giả sử tôi đã tên thư mục "TestMech", trong đó có số lượng ảnh mà tất cả ảnh tôi cần phải tải lên với sự giúp đỡ của chỉ số tiến bộ là nó có thể & làm sao –

Các vấn đề liên quan