文件到达文件夹后,立即在S3中上载文件

时间:2018-11-24 11:18:28

标签: java amazon-web-services amazon-s3 aws-sdk

我再次改写我的问题,因为我一直致力于不明确地发表。 所以我有一个文件夹,几分钟之内它将可以收到许多文件。 我需要继续监视该文件夹,一旦文件到达,我就必须上传到S3中。 文件大小最大为10 KB,但频率很高。

这是我的代码,它监视文件夹并开始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 :(得分:1)

在for循环中获取如下所示的路径

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