Carregador de arquivo Java simples sem dependências

Publicados: 2023-01-06

Um dos requisitos fundamentais dos aplicativos e sites da Web contemporâneos é a capacidade de fazer upload de arquivos, como documentos, fotos e vídeos. Por exemplo, os usuários podem publicar vídeos e imagens em plataformas de redes sociais como o Instagram.

Antes, implementar e gerenciar o procedimento de upload de arquivos era uma tarefa difícil. Felizmente, os uploads de arquivos ficaram mais simples como resultado dos avanços na tecnologia online. Por exemplo, um uploader de arquivos Java torna o upload de arquivos rápido e conveniente.

No entanto, por meio de uploads de arquivos, os cibercriminosos podem introduzir malware ou outro conteúdo nocivo em sua máquina e corromper o servidor. Os desenvolvedores devem, portanto, ter certeza absoluta de que o upload de arquivos em seu site ou aplicativo da web é seguro. Para estabelecer o upload seguro de arquivos, recomendamos que você utilize um SDK de upload de arquivo Java confiável.

Veremos como usar o Java para criar um uploader de arquivo neste artigo.

Como implementar um uploader de arquivos usando Java?

Um uploader de arquivo nada mais é do que um “enviar” no qual os usuários podem clicar para fazer upload de um arquivo para um aplicativo da Web ou site. Um uploader de arquivo, no entanto, significa consideravelmente mais para os desenvolvedores.

Podemos criar um uploader de arquivo simples no qual usamos apenas um formulário HTML e um servlet. Em nosso exemplo, o formulário HTML terá dois campos de entrada. Um campo de entrada permite que o usuário carregue seu arquivo e o segundo campo de entrada permite que o desenvolvedor nos diga onde devemos armazenar o arquivo.

Estamos usando o método POST para enviar os dados do formulário, incluindo o arquivo, para o servidor. Além disso, quando fazemos uploads de arquivos, usamos encrypt=”multipart/form-data” porque os arquivos contêm muitos caracteres não imprimíveis.

O servlet gerencia a solicitação POST e extrai o arquivo do fluxo após processar os dados do arquivo de entrada. O destino especifica o local no sistema onde o arquivo deve ser salvo. Quando pressionamos o botão Upload, os dados são transmitidos para o servlet, que armazena o arquivo no local designado.

Criando um arquivo HTML com o campo de entrada

Antes de começarmos, crie um arquivo index.html para acompanhar.

O index.html deve ter o seguinte código:

<!DOCTYPE html>
<html lang=”en”>
<cabeça>
<title>Carregador de arquivos Java</title>
<meta http-equiv=”Content-Type” content=”texto/html; conjunto de caracteres=UTF-8″>
</head>
<corpo>
<form method=”POST” action=”upload” enctype=”multipart/form-data” >
Arquivo:
<input type=”file” name=”java-file” id=”java-file” /> <br/>
Destino:
<input type=”text” value=”/java-folder” name=”destination”/>
</br>
<input type=”enviar” valor=”Enviar” nome=”enviar” id=”enviar” />
</form>
</body>
</html>

Veja como sua página deve ser:

Manipulando o processamento do arquivo no lado do servidor

Para escrever o código do servlet, criaremos um arquivo chamado FileUploadServlet.java. Serlets usam anotações para definir componentes e metadados. Portanto, a anotação @WebServlet é usada para definir um componente servlet em Java.

A anotação do Servlet deve dizer qual HttpServlet deve ser executado para qual URL. Para isso, estamos definindo os parâmetros name e ulrPattern em nossa anotação @WebServlet. Observe que, ao enviarmos nosso formulário, iremos redirecionar para a url /upload onde a classe FileUploadServlet será executada.

A anotação @MultipartConfig informa ao servlet que ele receberá multipart/form-data no tipo MIME.

Vamos escrever nosso código completo agora.

@WebServlet(nome = “FileUploadServlet” , urlPatterns = { “/upload” })
@MultipartConfig
public class FileUploadServlet extends HttpServlet {

registrador estático final privado LOGGER =
Logger.getLogger(FileUploadServlet.class.getCanonicalName());

protegido void processRequest(solicitação HttpServletRequest,
Resposta HttpServletResponse)
lança ServletException, IOException {
response.setContentType( “text/html;charset=UTF-8” );

final String dest= request.getParameter( “destino” );
parte final parte = request.getPart( “arquivo” );
final String nameOfFile = getFileName(parte);

OutputStream out = null ;
InputStream cont = null ;
final PrintWriter printWriter = response.getWriter();

tente {
out = new FileOutputStream( new File(dest + File.separator
+ nomeDoArquivo));
cont = part.getInputStream();

int leitor = 0 ;
final byte[] bytes = novo byte[ 1024 ];

while ((leitor = cont.read(bytes)) != -1 ) {
out.write(bytes, 0 , leitor);
}
printWriter.println( “Arquivo “ + nomeDoArquivo + ” criado em “ + dest);
LOGGER.log(Level.INFO, “Arquivo{0} enviado para {1}” ,
new Object[]{nameOfFile, dest});
} catch (FileNotFoundException fne) {
printWriter.println( “Você não mencionou um nome de arquivo ou é “
+ “tentando fazer upload de um arquivo para um inexistente “
+ “localização”. );
printWriter.println( “<br/> ERRO: “ + fne.getMessage());

LOGGER.log(Level.SEVERE, “Erro ao carregar o arquivo. Erro: {0}” ,
new Object[]{fne.getMessage()});
} finalmente {
if (fora != null ) {
out.close();
}
if (cont!= nulo ) {
cont.close();
}
if (printWriter != null ) {
printWriter.close();
}
}
}

private String getFileName(parte final da parte) {
final String partHeader = part.getHeader( “conteúdo-disposição” );
LOGGER.log(Level.INFO, “Part Header = {0}” , partHeader);
for (String content : part.getHeader( “content-disposition” ).split( “;” )) {
if (content.trim().startsWith( “nome do arquivo” )) {
return content.substring(
content.indexOf( '=' ) + 1 ).trim().replace( “\”” , “” );
}
}
retornar nulo ;
}
}

O método processRequest chama o método getFileName para obter o nome do arquivo da parte do arquivo após recuperar o destino e a parte do arquivo da solicitação. Em seguida, o método cria um FileOutputStream e transfere o arquivo para o local desejado. A parte de tratamento de erros do método detecta e aborda algumas das causas mais frequentes de erros de arquivo não encontrado.

Implantar o código

Agora temos que construir e executar nosso programa. Para isso, você pode usar qualquer IDE de sua preferência, como NetBeans, Eclipse, Intellij Idea etc.

https://cdn.pixabay.com/photo/2016/11/30/20/58/programming-1873854__340.png

Se você estiver usando o NetBeans, abra o Netbeans IDE e navegue até o diretório de trabalho. Consulte a documentação oficial do Java se tiver problemas. Clique com o botão direito do mouse em sua pasta na guia Projetos e escolha Implantar. Em seguida, podemos acessar o navegador e digitar a URL abaixo:

http://localhost:8080/{nome da pasta}/

A página HTML criada acima será aberta depois que você inserir o URL e pressionar a tecla Enter. Para fazer o upload de um arquivo para o local desejado, podemos pesquisar no sistema e escolher o arquivo. Digitamos o caminho para a pasta na qual queremos armazenar o Arquivo na área de destino. O diretório deve ser gravável e já existir no sistema. Quando clicamos no botão de upload com o campo de destino vazio, uma exceção é gerada.

O servlet recebe uma solicitação POST quando clicamos no botão de upload e copia o arquivo selecionado para a pasta especificada.

Podemos visitar a pasta designada e verificar se o arquivo carregado (por exemplo TextFile.txt) está lá depois de clicar no botão de upload.

Até agora, construímos um uploader de arquivo Java simples usando HTML e Java. No entanto, como o “simples” se torna um uploader complexo com muitos recursos, pode ser difícil acompanhar os recursos importantes daqueles que não são. Sem mencionar que existem vários problemas de segurança quando consideramos criar um uploader do zero. Portanto, a próxima seção mostrará como você pode fazer upload de arquivos com o Filestack SDK seguro.

Como fazer upload de arquivos facilmente com o Filestack SDK

Para acompanhar, você precisará de uma chave de API do Filestack .

Para começar, instale o Filestack SDK usando o comando abaixo:

implementação 'com.filestack:filestack-java:0.9.0'

Para implementar os recursos de upload usando o Filestack, use o seguinte código em seu arquivo Java:

// Criando o cliente
Config configuration = new Config( “API_KEY” );
Cliente cliente = new Cliente(configuração);

// Definindo opções e metadados relacionados ao upload
Opção StorageOptions = novo StorageOptions.Builder()
.mimeType( “texto/simples” )
.filename( “arquivo.txt” )
.Construir();

// Executa um upload síncrono
Arquivos FileLink = client.upload( “/filepath” , false );

// Executa um upload assíncrono
Flowable<Progress<FileLink>> upload = client.uploadAsync( “filepath” , false );
upload.doOnNext( new Consumer<Progress<FileLink>>() {
@Sobrepor
public void accept(Progress<FileLink> progress) lança Exception {
System.out.printf( “%f%% Seu arquivo foi carregado\n” , progress.getPercent());
if (progress.getData() != null ) {
Arquivos FileLink = progress.getData();
}
}
});

Para garantir que está funcionando, os seguintes testes podem ser executados:

./teste de arquivos

Caso você esteja procurando implantar seu aplicativo, o Bintray é o alvo das implantações. Para implantar, você precisa de uma conta de usuário registrada na organização Filestack. Observe também as diretrizes básicas de lançamento do Filestack. As variáveis ​​de ambiente “BINTRAY USER” e “BINTRAY API KEY” são necessárias. Para correr:

exportar BINTRAY_USER=
exportar BINTRAY_API_KEY=
./arquivos bintrayUpload

Conclusão

Você também pode optar por uma ferramenta de terceiros se achar difícil manter e criar seu próprio sistema de upload de arquivos Java. Devido a questões de segurança e privacidade de dados, as pessoas podem evitar o uso de sistemas de terceiros, por exemplo, ao fazer upload de arquivos contendo registros médicos.

Além disso, eles temem ter pouco controle sobre quem tem acesso à infraestrutura de armazenamento de arquivos. No entanto, você pode garantir a segurança dos dados do formulário e do documento utilizando uma solução confiável de upload de arquivos.

Perguntas Frequentes (FAQ)

Você pode mover arquivos usando uma API?

Sim. A movimentação de arquivos usando uma API pode ser feita usando ferramentas baseadas em API disponíveis no mercado. Isso pode ser combinado com programas executados em várias plataformas, como programas online também.

Posso enviar um arquivo grande para a API REST?

Pode ser difícil carregar arquivos grandes, especialmente quando outros fatores, como largura de banda e conexões de rede ruins, estão presentes. Isso pode resultar em inúmeras falhas de upload.

Como o Java lê um arquivo carregado?

Usando fluxos de entrada, um programa Java lê coleções de bytes ou caracteres. A leitura de arquivo é uma operação sequencial que começa com a construção do objeto de arquivo, passa-o para o arquivo de entrada, lê os dados do fluxo, processa-os e fecha o fluxo e o objeto de arquivo.

O que é uma ferramenta de upload de arquivo?

É uma API ou plug-in que pode ser conectado ao seu aplicativo da Web e permitir que os usuários façam upload de fotos, vídeos e arquivos de texto, além de permitir algumas modificações básicas, efeitos de filtro etc.