Java解压所有文件,忽略目录并上载到S3
我目前的目标是获取一个用户上传的ZIP文件,将其放大,获取所有文件并将每个文件上传到AmazonS3。当文件位于ZIP文件的根目录下时,我当前的实现工作正常。如果ZIP中有一个包含更多文件的文件夹,则函数将失败。方法如下: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
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
应用程序-工作区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
}
}