Quando o usuário coloca um arquivo estático numa pasta pré-definida do servidor, um servlet (listener) faz o upload para vários outros servidores deste arquivo (cópias).
Estou precisando de um servlet que faça isso. Alguma sugestão? Obrigado!
Listener para Upload de arquivos estáticos
K
4 Respostas
G
Procure por Commons File Upload.
M
você está querendo fazer uma aplicação web para isto? Bem é possível, mas existe ferramentas que já fazem este serviço. Veja com alguém de infra-estrutura que você saberá quais são estes softwares. Você pode criar uma classe multhread para fazer este serviço… que fica lá vendo de foi feita alguma alteração neste diretório…
:joia:
K
Obrigado pelo retorno. Não imaginava que fosse tão rápido!
K
Graças a ajuda de vcs, consegui montar um servlet para tal fim.
Segue o código para quem interessar:
web.xml:
<servlet>
<servlet-name>UpLoadListenerServlet</servlet-name>
<servlet-class>br.com.listener.UpLoadListenerServlet</servlet-class>
<init-param>
<param-name>origem</param-name>
<param-value>C:\origem</param-value>
</init-param>
<init-param>
<param-name>destino</param-name>
<param-value>C:\destino</param-value>
</init-param>
<init-param>
<param-name>ciclo</param-name>
<param-value>1</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
servlet:
package br.com.listener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.Timer;
import java.util.TimerTask;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class UpLoadListenerServlet extends GenericServlet {
// Timer
private Timer timer;
// Ciclo (default: 1s)
private int ciclo = 1;
private String origem = "";
private String destino = "";
public void init() throws ServletException {
//this.log("Inicializando...");
// pasta origem (lê do web.xml)
this.origem = getServletConfig().getInitParameter("origem");
// pasta destino (lê do web.xml)
this.destino = getServletConfig().getInitParameter("destino");
this.ciclo = Integer.parseInt(getServletConfig().getInitParameter(
"ciclo"));
//this.log("Inicializado!");
this.timer = new Timer(true);
this.timer.schedule(new RemindTask(), 0, ciclo * 1000);
}
public void destroy() {
//this.log("Finalizando...");
this.timer.cancel();
this.timer = null;
//this.log("Finalizado!");
}
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
}
class RemindTask extends TimerTask {
public void run() {
//log("Execução iniciada");
try {
SynchronizeFiles(origem, destino);
} catch (Exception e) {
e.printStackTrace();
log(e.toString());
}
//log("Executada!");
}
}
public void SynchronizeFiles(String origem, String destino) {
File source = new File(origem);
File target = new File(destino);
File[] sourceFiles = source.listFiles();
File[] targetFiles = null;
String targetFile = null;
if (!target.exists()) {
File dir = new File(target.getAbsolutePath());
dir.mkdir();
this.log(target.getAbsolutePath() + " -> " + "criada pasta destino");
}
targetFiles = target.listFiles();
for (int i = 0; i < sourceFiles.length; i++) {
targetFile = target.getAbsolutePath() + "\\" + sourceFiles[i].getName();
if (sourceFiles[i].isDirectory()) {
this.SynchronizeFiles(sourceFiles[i].getAbsolutePath(), targetFile);
} else if (sourceFiles[i].isFile()) {
if (!ExistsTargetFile(targetFiles, targetFile, sourceFiles[i].lastModified())) {
this.CopyFile(sourceFiles[i].getAbsolutePath(), targetFile);
this.log(targetFile + " -> " + "criado arquivo destino");
}
}
}
}
public boolean ExistsTargetFile(File[] lista, String nome, long lastModified) {
boolean retorno = false;
for (int i = 0; i < lista.length; i++) {
if (lista[i].getAbsolutePath().equalsIgnoreCase(nome)) {
if (lista[i].lastModified() == lastModified) {
retorno = true;
}
break;
}
}
return retorno;
}
public void CopyFile(String origem, String destino) {
try {
FileChannel srcChannel = new FileInputStream(origem).getChannel();
FileChannel dstChannel = new FileOutputStream(destino).getChannel();
dstChannel.transferFrom(srcChannel, 0, srcChannel.size());
srcChannel.close();
dstChannel.close();
File source = new File(origem);
File target = new File(destino);
long modifiedTime = source.lastModified();
target.setLastModified(modifiedTime);
} catch (IOException e) {
this.log(e.toString());
}
}
}
Criado 6 de junho de 2006
Ultima resposta 19 de jun. de 2006
Respostas 4
Participantes 3
Alura O que é Python? — um guia completo para iniciar nessa linguagem de programação Acesse agora o guia sobre Python e inicie sua jornada nessa linguagem de programação: o que é e para que serve, sua sintaxe e como iniciar nela!
Casa do Codigo Guia pratico de TypeScript: Melhore suas aplicacoes... Por Thiago da Silva Adriano — Casa do Codigo