将文件从AWS Lambda tmp文件夹传输到sftp服务器

时间:2020-03-10 16:15:53

标签: java amazon-web-services aws-lambda

我创建了一个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();
  }

1 个答案:

答案 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条目。