Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah Java Intergation SFTP Spring: Mengendalikan memindahkan fail ke direktori lain

Intergation SFTP Spring: Mengendalikan memindahkan fail ke direktori lain

Feb 09, 2024 pm 02:18 PM

Editor php memperkenalkan Integrasi Spring SFTP sebagai rangka kerja berkuasa yang boleh membantu pembangun mengendalikan tugas mengalihkan fail dari satu direktori ke direktori lain. Sama ada pada pelayan tempatan atau pelayan jauh, rangka kerja ini memudahkan untuk mengalih dan mengurus fail. Ia menyediakan satu siri API dan pilihan konfigurasi yang membolehkan pembangun menyesuaikan logik memindahkan fail dan mengendalikan pelbagai pengecualian. Sama ada dalam aplikasi peringkat perusahaan atau projek peribadi, Spring SFTP Integration ialah alat yang sangat praktikal yang patut diterokai.

Kandungan soalan

Saya baru dalam intergation musim bunga. Saya perlu memproses fail dari pelayan sftp dari direktori user1/muat naik dan kemudian memindahkannya ke direktori user1/diproses. Kod saya biasanya berfungsi dengan baik, tetapi saya mempunyai dua masalah:

  1. Apabila saya memulakan semula aplikasi, direktori pengguna1/diproses dan semua fail yang wujud sebelum ini dipadamkan. Saya hanya mahu menulis lebih banyak fail di sana tanpa mengosongkan direktori setiap kali.

  2. Setiap kali saya memulakan aplikasi, saya menerima fail (seperti yang saya lihat nama mereka dan saya mencetak ke konsol) saya menerima fail lama yang telah dialihkan ke direktori yang diproses. Ini kelihatan sangat pelik kerana saya tidak melihat fail ini apabila saya menyambung ke sftp melalui alat lain seperti winscp. Adakah senarai fail lama telah diberi penghormatan di suatu tempat?

@Value("${cielo.sftp.host}")
    private String sftpHost;
    @Value("${cielo.sftp.port}")
    private int sftpPort;
    @Value("${cielo.sftp.user}")
    private String sftpUser;
    @Value("${cielo.sftp.pass}")
    private String sftpPasword;
    @Value("${cielo.sftp.remotedir}")
    private String sftpRemoteDirectoryDownload;

    @Value("${cielo.sftp.localdir}")
    private String sftpLocalDirectoryDownload;
    @Value("${cielo.sftp.filter}")
    private String sftpRemoteDirectoryDownloadFilter;

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public SessionFactory<LsEntry> sftpSessionFactory() {
        DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
        factory.setHost(sftpHost);
        factory.setPort(sftpPort);
        factory.setUser(sftpUser);
        factory.setPassword(sftpPasword);

        factory.setAllowUnknownKeys(true); //Set to true to allow connections to hosts with unknown (or changed) keys. Its default is 'false'. If false, a pre-populated knownHosts file is required.
        return new CachingSessionFactory<>(factory);
    }


    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE - 1)
    public SftpInboundFileSynchronizer sftpInboundFileSynchronizer(final SessionFactory<LsEntry> sftpSessionFactory) {
        SftpInboundFileSynchronizer fileSynchronizer =
                new SftpInboundFileSynchronizer(sftpSessionFactory);
        fileSynchronizer.setDeleteRemoteFiles(false);
        fileSynchronizer.setRemoteDirectory(sftpRemoteDirectoryDownload);
        fileSynchronizer
                .setFilter(new SftpSimplePatternFileListFilter(sftpRemoteDirectoryDownloadFilter)); //todo maybe use RegexPatternFileListFilter?
        return fileSynchronizer;
    }

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE - 2)
    @InboundChannelAdapter(channel = "fromSftpChannel", poller = @Poller(fixedDelay = "1000"))
    //@InboundChannelAdapter(channel = "fromSftpChannel", poller = @Poller(cron = "${cielo.sftp.poller.cron}"))

    public MessageSource<File> sftpMessageSource(final SftpInboundFileSynchronizer sftpInboundFileSynchronizer) {
        SftpInboundFileSynchronizingMessageSource source =
                new SftpInboundFileSynchronizingMessageSource(sftpInboundFileSynchronizer);
        source.setLocalDirectory(new File("/tmp/local"));
        source.setAutoCreateLocalDirectory(true);
        source.setLocalFilter(new AcceptOnceFileListFilter<File>());
        return source;
    }

    @Bean
    @ServiceActivator(
            inputChannel = "fromSftpChannel")
    public MessageHandler resultFileHandler() {
        return new MessageHandler() {
            @Override
            public void handleMessage(final Message<?> message) throws MessagingException {
                String payload = String.valueOf(message.getPayload());
                System.err.println(payload);
            }
        };
    }

    private static final SpelExpressionParser PARSER = new SpelExpressionParser();

    @Bean(name="fromSftpChannel")
    public MessageChannel fromSftpChannel() {
        return new PublishSubscribeChannel();
    }

    @Bean
    @ServiceActivator(inputChannel = "fromSftpChannel")
    @Order(Ordered.LOWEST_PRECEDENCE)
    public MessageHandler moveFile() {
        SftpOutboundGateway sftpOutboundGateway = new  SftpOutboundGateway(sftpSessionFactory(), AbstractRemoteFileOutboundGateway.Command.MV.getCommand(), "'/user1/upload/'.concat(" + PARSER.parseExpression("payload.getName()").getExpressionString() + ")");
        sftpOutboundGateway.setRenameExpressionString("'/user1/processed/'.concat(" + PARSER.parseExpression("payload.getName()").getExpressionString() + ")");
        sftpOutboundGateway.setRequiresReply(false);
        sftpOutboundGateway.setOutputChannelName("nullChannel");
        sftpOutboundGateway.setOrder(Ordered.LOWEST_PRECEDENCE);
        sftpOutboundGateway.setAsync(true);
        return sftpOutboundGateway;
    }
Salin selepas log masuk

Terima kasih atas bantuan anda!

Saya melihat contoh dalam integrasi musim bunga - sftp untuk menamakan semula atau memindahkan fail dalam pelayan jauh selepas menyalin dan ia banyak membantu saya

Saya juga menyemak dokumentasi sftp intergation spring rasmi

Penyelesaian

Saya tidak pasti cara mengosongkan direktori jauh semasa permulaan. Tingkah laku ini perlu dinyahpepijat pada pihak anda. Tetapi saya boleh memberitahu anda mengapa anda melihat fail lama. Anda menamakan semula dari jauh selepas pemprosesan, tetapi salinan tempatan fail masih disimpan pada source.setLocalDirectory(new File("/tmp/local"));. Setelah anda selesai menamakan semula atau but semula, pertimbangkan untuk membersihkannya.

Anda juga boleh menyemak SftpStreamingMessageSource untuk menggantikan logik anda: https://docs.spring.io/spring-integration/reference/sftp/streaming.html

Atas ialah kandungan terperinci Intergation SFTP Spring: Mengendalikan memindahkan fail ke direktori lain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)