Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java解压所有文件,忽略目录并上载到S3_Java_Amazon S3_Playframework_Zip - Fatal编程技术网

Java解压所有文件,忽略目录并上载到S3

Java解压所有文件,忽略目录并上载到S3,java,amazon-s3,playframework,zip,Java,Amazon S3,Playframework,Zip,我目前的目标是获取一个用户上传的ZIP文件,将其放大,获取所有文件并将每个文件上传到AmazonS3。当文件位于ZIP文件的根目录下时,我当前的实现工作正常。如果ZIP中有一个包含更多文件的文件夹,则函数将失败。方法如下: public Result zip() throws IOException { Http.MultipartFormData body = request().body().asMultipartFormData(); List <Http.MultipartFor

我目前的目标是获取一个用户上传的ZIP文件,将其放大,获取所有文件并将每个文件上传到AmazonS3。当文件位于ZIP文件的根目录下时,我当前的实现工作正常。如果ZIP中有一个包含更多文件的文件夹,则函数将失败。方法如下:

public Result zip() throws IOException {

Http.MultipartFormData body = request().body().asMultipartFormData();
List <Http.MultipartFormData.FilePart> uploadFilePart = body.getFiles();
for(Http.MultipartFormData.FilePart uploadFileParts: uploadFilePart) {

    final File uploadfile = (File) uploadFileParts.getFile();
    ZipFile zipIn = new ZipFile(uploadfile);
    final Enumeration<? extends ZipEntry> entries = zipIn.entries();
    while (entries.hasMoreElements()) {
        final ZipEntry entry = entries.nextElement();
        PutObjectRequest putObjectRequest = new PutObjectRequest(s3Bucket, entry.getName(), new File(entry.getName())); // create upload object to send to S3
        putObjectRequest.withCannedAcl(CannedAccessControlList.Private); // set to private, so only the server can access it
        s3Client.putObject(putObjectRequest); // upload file
    }
    zipIn.close();
}
return ok();
我尝试上载的Zip文件具有以下结构:

  • 工作空间1_005.png
  • 选择_009.png
  • test/maxresdefault.jpg
  • test/191559.jpg
其中“test”是Zip中的一个子文件夹。如果我只是打印出我得到的拉链:

play.api.play-应用程序已启动(开发人员) 应用程序-选择\u 009.png
应用程序-工作区1_005.png
应用程序-test/maxresdefault.jpg
应用程序-测试/191559.jpg

如果尝试上载,则会抛出错误:

play.api.http.HttpErrorHandlerExceptions$$anon$1:执行异常[[SDKClientexException:无法计算MD5哈希:test/maxresdefault.jpg(非目录)]
原因:com.amazonaws.SdkClientException:无法计算MD5哈希:test/maxresdefault.jpg(非目录)
原因:java.io.FileNotFoundException:test/maxresdefault.jpg(非目录)


我想知道它是不是没有找到文件的正确路径,还是发生了什么事情?感谢您的帮助。谢谢

像这样的

 File[] files = new File("").listFiles();
 uploadFiles(files);


 public static void uploadFiles(File[] files) {
    for (File file : files) {
    if (file.isDirectory()) {
        uploadFiles(file.listFiles()); // Calls same method again.
    } else {
        // do the uploading
    }
}
这将通过忽略目录进行迭代,但不确定这是否是最有效的方法

 File[] files = new File("").listFiles();
 uploadFiles(files);


 public static void uploadFiles(File[] files) {
    for (File file : files) {
    if (file.isDirectory()) {
        uploadFiles(file.listFiles()); // Calls same method again.
    } else {
        // do the uploading
    }
}