Tenho um arquivo xml que gerando usando o JDOM, depois que o arquivo é gerado. O servelt enviar o arquivo para o usuario com
o Redirect mais o problema é que o navegador esta lendo o arquivo, em vez de abrir uma tela para o usuario salvar o arquivo.
Como faço para o navegador não ler e se tem como enviar esse arquivo direto para o usuario sem precisar de arquivo temporario ?
[code]try {
FileWriter arquivo = new FileWriter(new File(“d:/arquivos/Apache Software Foundation/Tomcat 7.0/webapps/teste/arquivo/teste.xml”));
xout.output(documento, arquivo);
} catch (Exception e) {
e.getStackTrace();
}
res.sendRedirect("http://localhost:8080/teste/arquivo/teste.xml");
[/code]
Se tiver usando Servlet tenta manipular o response?
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + arquivo + "");
Use esse contentType “application/force-download”.
Obrigado valeu.
So uma coisa quando passo “arquivo” no setHeader, vem como
download um arquivo com o nome java.io.FileWriter@51d50871.
não queria colocar aquele caminho que coloquei no new file, tem como passar o objeto e ele pegar o arquivo.xml no setHeader?
Assumimos que arquivo seria uma String com o nome que o usuário verá.
String nomeArquivo = "documento.pdf";
String nomeArquivo = "documento.txt";
String nomeArquivo = file.getName();
String nomeArquivo = obj.getNomeArquivo();
//etc...
response.setHeader("Content-Disposition", "attachment; filename=" + nomeArquivo + "");
O codigo ficou assim.
File file = File.createTempFile("teste", ".xml");
FileWriter fileWriter = new FileWriter(file);
xout.output(documento, fileWriter);
res.setContentType("application/force-download");
res.setHeader("Content-Disposition", "attachment; filename=" + file.getName() + "");
so que é gerado dois arquivos, um do xout.output que contem o xml e outro em
branco que o setheader enviar. O arquivo que o xout.output gera não vai no header.
como faço para passar o xout.output no response ?
Não sei de qual tipo é o xoutput, mas seria mais ou menos assim:
[code]Document doc; // O Documento xml
doc.appendChild(); // adiciona algo no xml
XMLWriter writer; // A classe que grava xml, depende da API
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
writer.write(outputStream); // Grava o XML
res.setContentType(“application/force-download”);
res.setHeader(“Content-Disposition”, “attachment; filename=arquivo.xml”);
res.getOutputStream().write(outputStream.toByteArray()); // Aqui vc pega os bytes gravados no Stream[/code]
o xoutput é XMLOutputter xout = new XMLOutputter();
vo tenta com ByteArrayOutputStream.
Valeu.
O gerar arquivo xml ficou dessa forma.
XMLOutputter x= new XMLOutputter();
String xmlDocumento = x.outputString(doc);
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] arrayXML = xmlDocumento .getBytes();
outputStream.write(arrayXML);
res.setContentType("application/force-download");
res.setHeader("Content-Disposition", "attachment; filename=xml.xml");
res.getOutputStream().write(outputStream.toByteArray());
Agora to tentando fazer o upload mais estou com dificuldade para pegar a informação que vem do input file.
Document doc = null;
//String xml = req.getParameter("arquivo"); tentei isso mais não funcionou o "arquivo" é o name do input file
String fileXml = req.getHeader("filename"); não consegui pegar o nome do arquivo vem "null"
SAXBuilder builder = new SAXBuilder();
try {
doc = builder.build(fileXml); // aqui preciso passar o arquivo que o usuario selecionou
} catch (Exception e) {
e.printStackTrace();
}