Перенос файлов из папки AWS lambda tmp на сервер sftp - PullRequest
0 голосов
/ 10 марта 2020

Я создал AWS лямбда-функцию, которая берет некоторые файлы из корзины S3, архивирует их и передает заархивированный файл на сервер sftp. Когда я смотрю на сервер, я вижу, что папка tmp перенесена с файлами, и внутри zip-файла создается папка tmp. Когда я открываю zip-файл, появляется папка tmp, и внутри этой папки находятся файлы, которые я заархивировал. Я искал inte rnet и 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 Ответ

1 голос
/ 10 марта 2020

Я думаю, что проблема заключается в том, что вы создаете запись zip с использованием new ZipEntry(path), и это означает, что полученный zip-файл будет содержать полный путь в качестве имени записи zip.

Вы можете получить фактическое имя файла из полного пути / файла в Java следующим образом:

File f = new File("/tmp/folder/cat.png");
String fname = f.getName();

Затем вы можете использовать fname для создания zip-записи, вызвав new ZipEntry(fname).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...