Tenho um programa abaixo que uso para gerar download, mas estou tendo um problema que as pastas ao deszipar e arquivos que contenham caracteres com acento está aparecendo com a codificação toda bagunçada.
Amigo, tem certeza que quer usar “application/octet-stream” como content type? Pelo que vi é um arquivo “.txt”. Logo, não seria melhor usar “text/pain”? Veja se isso resolve.
Olá. Bem, se o conteudo do arquivo está aparecendo com caracteres estranhos é porque ele já está assim devido a sua própria meta informação. Tens que rever como o arquivo é gerado. Se não puder fazer isso, terá que mudar seu charset antes do download.
Mas, tente isso (eu nunca tentei) no contet type: “xxx; charset=ISO-8859-1”
O meu arquivo que faço upload está com os caracteres com acento certo, está gravando perfeito com acento, mas na hora de gerar o download, gera com os caracteres bagunçado, tanto pasta quanto os arquivos que contenham acentuação. Obs: Tudo que tenha acento, fica bagunçado ao fazer o download.
Ele é criado pela sua aplicação ou já fazem o upload dele e depois é simplesmente feito o download? Porque se for assim, tem que ver com essa galera especialista em mapa de caracteres em SOs. Nesse caso não seria problema do framework Web, visto que ele não altera sequer 1 bit do arquivo, entende?
Os usuários fazem o upload do arquivo para o sistema. (Já verifiquei se nessa hora do upload do arquivo guardado, ele está vindo com caracteres estranhos e aparentemente o arquivo guardado no sistema, mesmo contendo acento nos nomes está sendo guardado certo).
Depois eu faço o download do arquivo que está guardado no sistema. (Já notei antes de fazer o download do arquivo se ele está com caracteres estranhos no nome e está certo o nome).
Após o download ao deszipar o arquivo, ele fica os nomes com caracteres estranhos.
Eu faço assim o download do arquivo:
@Action(value = "/download", results = {
@Result(location = "telaPrincipal", name = ERRO, type = "tiles"),
@Result(location = "ok", name = SUCESSO, type = "stream",
params = {
"contentType", "application/octet-stream",
"inputName", "fileInputStream",
"contentDisposition", "attachment;filename=\"download.zip\"",
"bufferSize", "1024"
})
})
public String download(){
try{
//Pega o caminho da aplicação
ServletContext context = ServletActionContext.getServletContext();
String caminho=context.getRealPath("");
//Pega o caminho que está o projeto, e faz o download de tudo
caminho = caminho + java.io.File.separator+"arquivo"+java.io.File.separator + "pasta1";
//Esse método fará o zip da pasta do projeto para a extensão (.zip)
Util.ziparArquivo(caminho, caminho+".zip");
fileInputStream = new FileInputStream(new File(caminho + ".zip"));
}catch (Exception e){
e.printStackTrace();
return ERRO;
}
return SUCESSO;
}
Antes de fazer o download eu zipo ele da seguinte forma
//Método responsável para mandar zipar a pasta
public static void ziparArquivo(String caminhoPasta, String destinoZip) throws Exception {
ZipOutputStream zip = null;
FileOutputStream fileWriter = null;
fileWriter = new FileOutputStream(destinoZip);
zip = new ZipOutputStream(fileWriter);
//Adiciona a pasta no zip
adicionarCaminhoZipar("", caminhoPasta, zip);
zip.flush();
zip.close();
}