Загрузите файлы в S3, как только они попадут в папку - PullRequest
0 голосов
/ 24 ноября 2018

Я перефразирую свой вопрос еще раз, потому что получил преданность за то, что не опубликовал ясно.Так что у меня есть папка, где я буду получать много файлов в течение нескольких минут.Мне нужно продолжать смотреть эту папку, и как только файл прибудет, я должен загрузить в S3.Размер файлов будет максимум 10 КБ, но частота будет высокой.

Вот мой код, который просматривает папку и запускает загрузку S3.Но моя проблема в том, как я могу передать файл из класса просмотра файлов в загрузчик S3.

Вот мой код для просмотра папки

public class MonitorDirectory {
    public static void main(String[] args) throws IOException, InterruptedException {
        Path faxFolder = Paths.get("C:\\Users\\u6034690\\Desktop\\ONEFILE\\");
        WatchService watchService = FileSystems.getDefault().newWatchService();
        faxFolder.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
        boolean valid = true;
        do {
            WatchKey watchKey = watchService.take();
            for (WatchEvent event : watchKey.pollEvents()) {
                WatchEvent.Kind kind = event.kind();
                if (StandardWatchEventKinds.ENTRY_CREATE.equals(event.kind())) {
                    String fileName = event.context().toString();
                    UploadObject onj=new UploadObject();//How to pass file path here 
                    onj.uploadIntoS3();
                    System.out.println("File Created:" + fileName);
                }
            }
            valid = watchKey.reset();
        } while (valid);
    }
}

Вот мой класс, где я загружаю файл в S3, которыйтеперь работает нормально

public class UploadObject {
    public  void uploadIntoS3() throws IOException, InterruptedException {
        String bucketName = "a205381-auditxml/S3UPLOADER";
        try {
            AmazonS3 s3client = new AmazonS3Client();
            s3client.putObject(bucketName, "hello.txt",
                new File("C:\\Users\\u6034690\\Desktop\\ONEFILE\\hello.txt"));
            System.out.println("Uploaded onject");
        } catch (AmazonServiceException e) {
            e.printStackTrace();
        } catch (SdkClientException e) {
            e.printStackTrace();
        }
    }
}

Так как передать путь к файлу из MonitorDirectory класса в onj.uploadIntoS3(); Кроме того, еще одна последняя проверка - мой код будет поддерживать большую частоту загрузки файлов.

1 Ответ

0 голосов
/ 24 ноября 2018

Получите путь как показано ниже для цикла

final Path createdFile = (Path) event.context();
                final Path expectedAbsolutePath = watchedDirectory.resolve(createdFile);

                String fileName = event.context().toString();
                System.out.println("Full path: " + expectedAbsolutePath);
                UploadObject obj=new UploadObject();//How to pass file path here 

, а затем передайте загрузчик S3

obj.uploadIntoS3(expectedAbsolutePath.toFile());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...