我创建了一个AWS lambda函数,该函数从S3存储桶中获取一些文件,将其压缩并将其压缩文件传输到sftp服务器。当我查看服务器时,我看到tmp文件夹已随文件一起转移,并且在zip文件中创建了一个tmp文件夹。当我打开zip文件时,有一个tmp文件夹,在该文件夹内是我压缩过的文件。我搜寻了互联网和AWS,试图弄清楚如何在要压缩的文件中提取AWS Lambda中的目录,但是没有任何运气。我不想在zip文件中有一个tmp文件夹。解压缩zip文件时,我只想查看选择压缩的文件而没有任何文件夹。有谁知道如何做到这一点?我正在用Java编程。
我的代码在下面。
private DownloadFile(){
File localFile = new File(fileName);
//pull data and audit files from s3 bucket
s3Client.getObject(new GetObjectRequest("pie-dd-demo/daniel20", fileName), localFile);
zipOS = new ZipOutputStream(fos);
//send files to be zipped
writeToZipFile(fileName, zipOS);
}
public static void writeToZipFile(String path, ZipOutputStream zipStream)
throws FileNotFoundException, IOException {
File aFile = new File(path);
FileInputStream fis = new FileInputStream(aFile);
ZipEntry zipEntry = new ZipEntry(path);
try {
zipStream.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zipStream.write(bytes, 0, length);
System.out.println(path + "write to zipfile complete");
}
} catch (FileNotFoundException exception) {
// Output expected FileNotFoundExceptions.
} catch (Exception exception) {
// Output unexpected Exceptions.
}
zipStream.closeEntry();
fis.close();
}
答案 0 :(得分:1)
我认为问题在于您正在使用new ZipEntry(path)
创建一个zip条目,这意味着生成的zip文件将包含完整路径作为zip条目的名称。
您可以按照以下步骤从Java的完整路径/文件中检索实际文件名:
File f = new File("/tmp/folder/cat.png");
String fname = f.getName();
然后您可以使用fname
通过调用new ZipEntry(fname)
来创建zip条目。