Armazenando 이미지 프로토콜 SFTP com java - Springboot
10526 단어 javasftpdockerspringboot
Neste post vamos abordar o armazenamento de imagens utilizando o protocolo
SFTP
, vamos subir um servidor SFTP utilizando a chave SSH Importante mecanismo de autenticação que asseguram a proteção de dados e informações dentro de um container docker e enviar imagens para este servidor através de uma api 휴식 자바.Springboot를 사용하면 SFTP를 통해 더 이상 물체를 볼 수 없고 이미지를 볼 수 없습니다.
Crie uma 파스타 na raiz do projeto com o nome de sua escolha e dentro desta 파스타 um arquivo
dockerfile
e cole dentro dele os seguintes comandos.dockerfile
FROM ubuntu:latest
RUN mkdir -p /var/run/sshd
RUN apt update && \
apt install -y openjdk-8-jdk && \
apt install -y openssh-server
RUN useradd -rm -d /home/remote_user -s /bin/bash remote_user && \
echo remote_user:password1234 | chpasswd
RUN mkdir /home/remote_user/.ssh && \
chmod 700 /home/remote_user/.ssh
COPY id_rsa.pub /home/remote_user/.ssh/authorized_keys
RUN chown remote_user:remote_user -R /home/remote_user/.ssh && \
chmod 600 /home/remote_user/.ssh/authorized_keys
CMD [ "/usr/sbin/sshd" , "-D"]
E 음 arquivo com o nome docker-compose.yml com a seguinte configuração no mesmo
docker-compose.yml
version: '3.7'
services:
app:
container_name: sftp
build:
context: .
dockerfile: Dockerfile
ports:
- '58898:22'
Feito isso, via cmd, entre na pasta onde esta localizado os arquivos dockerfile e docker-compose.yml e rode o seguinte comando para criar uma chave de segurança
SSH
ssh-keygen -t rsa -m PEM -f id_rsa
apos rodar o comando sera pedido para você escrever uma frase e depois Confirmar esta frase para gerar o ssh.Ainda dentro desta pasta via cmd rode o comando
docker compose up -d
e será criado nosso servidor dentro de um container docker.Já podemos acessar nosso servidor através do
Filezila CLient
*Obs: 비밀번호 tem que ser o mesmo especificado no dockerfile, neste caso password1234Vamos utilizar a lib
JSch
para armazenar a imagem recebida no servidor SFTP
, para isto adicione a seguinte dependsência em seu projeto.<!-- https://mavenlibs.com/maven/dependency/org.lucee/jsch -->
<dependency>
<groupId>org.lucee</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
Crie uma classe de configuração do JSch para acessar nosso servidor junto com os métodos necessarios.
SftpConfig
package com.example.sftp;
import com.jcraft.jsch.*;
import java.io.InputStream;
public class SftpConfig {
/* criar canal para acessar servidor sftp */
public static ChannelSftp setupJsch() throws JSchException {
Session jschSession = null;
Channel sftp = null;
JSch jsch = new JSch();
JSch.setConfig("StrictHostKeyChecking", "no");
//jsch.setKnownHosts("/home/remote_user/.ssh/known_hosts");
jschSession = jsch.getSession("remote_user", "localhost", 58898);
// authenticate using private key
// jsch.addIdentity(<destino da chave ssh>);
// authenticate using password
jschSession.setPassword("password1234");
// 10 seconds session timeout
jschSession.connect(100000);
sftp = jschSession.openChannel("sftp");
return (ChannelSftp) sftp;
}
/* armazenar imagem servidor SFTP */
public static void salvarImagemSftp(InputStream storedImage, String originalFilename) throws SftpException, JSchException {
Session jschSession = null;
Channel sftp = null;
// transfer file from local to remote server
ChannelSftp channelSftp = setupJsch();
channelSftp.connect(50000);
channelSftp.put(storedImage,channelSftp.getHome() + "/" + originalFilename );
channelSftp.exit();
System.out.println("Done");
}
/* buscar imagem servidor sftp e transferir para pasta local */
public static void buscarImagemSftp(String originalFilename) throws SftpException, JSchException {
Session jschSession = null;
Channel sftp = null;
// transfer file from local to remote server
ChannelSftp channelSftp = setupJsch();
channelSftp.connect(50000);
channelSftp.get(channelSftp.getHome() + "/" + originalFilename, "C:\\Users\\Dell\\Desktop\\testeImagem" );
channelSftp.exit();
System.out.println("Done");
}
/* deletar imagem servidor sftp */
public static void deletarImagemSftp(String nomeImagem) throws SftpException, JSchException {
Session jschSession = null;
Channel sftp = null;
// transfer file from local to remote server
ChannelSftp channelSftp = setupJsch();
channelSftp.connect(50000);
channelSftp.rm(channelSftp.getHome() + "/" + nomeImagem);
channelSftp.exit();
System.out.println("Done");
}
}
Agora vamos criar uma classe
controller
para testarmos o envio de imagens para nosso servidorSFTP
e uma classemodel
para mapear a imagem que vamos receber pelo 입력은 컨트롤러를 통해 이루어집니다.Imagem
import org.springframework.web.multipart.MultipartFile;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Imagem {
private MultipartFile file;
}
ImagemController
package com.example.sftp;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.io.InputStream;
@RestController
public class ImagemController {
@PostMapping("/imagem")
public void armazenarImagemApenasSftp(Imagem imagem) throws IOException {
InputStream image = imagem.getFile().getInputStream();
try{
SftpConfig.salvarImagemSftp(image, imagem.getFile().getOriginalFilename() );
}catch (Exception e){
System.out.println(e.getMessage());
throw new IOException("Erro ao salvar imagem no cdn");
}
}
@GetMapping("/imagem")
public void buscarImagemSftp() throws IOException {
try{
SftpConfig.buscarImagemSftp("tcc.png");
}catch (Exception e){
System.out.println(e.getMessage());
throw new IOException("Erro ao salvar imagem no cdn");
}
}
@DeleteMapping("/imagem")
public void deletarImagemSftp() throws IOException {
try{
SftpConfig.deletarImagemSftp("tcc.png");
}catch (Exception e){
System.out.println(e.getMessage());
throw new IOException("Erro ao salvar imagem no cdn");
}
}
}
Vamos testar nossa aplicação via postman.
requisicao para salvar imagem
imagem salva em nosso servidor
requisicao para buscar imagem servidor SFTP e tranferir 파스타 로컬
이미지 살바 나 파스타 파사다 코모 경로
requisicao para deletar imagem servidor SFTP
SFTP 서버에서 이미지 삭제
E isso ai devs mas um conhecimento passado, deixarei no meu github para quem quiser acessar o projeto
Deixo aqui também meu para quem quiser me adicionar, grato a todos que leram este artigo e bora aprender galera.
Reference
이 문제에 관하여(Armazenando 이미지 프로토콜 SFTP com java - Springboot), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/2020nani/armazenando-imagens-protocolo-sftp-com-java-springboot-37ia텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)