Tamanho do arquivo com DataInputStream ou DataOutputStream

0 respostas
gbvbahia01

Pessoal, boa noite!

Tenho um applet que lê os dados de um banco de dados e gera um arquivo XML e envia o arquivo para um servlet:

public void salvarArquivo(Document document) throws IOException {
        URL servletURL = new URL("http://" + url.getHost() + ":" + url.getPort() + "/" + url.getPath() +"/UploadServlet");
        URLConnection servletConn = servletURL.openConnection();
        servletConn.setDoInput(true);
        servletConn.setDoOutput(true);
        servletConn.setUseCaches(false);
        servletConn.setDefaultUseCaches(false);

        DataOutputStream outputStream = new DataOutputStream(servletConn.getOutputStream());

        Format formatXML = Format.getPrettyFormat();
        formatXML.setEncoding("ISO-8859-1");

        XMLOutputter xout = new XMLOutputter();
        xout.setFormat(formatXML);
        xout.output(document, outputStream);

        outputStream.flush();
        outputStream.close();

        DataInputStream inputFromClient = new DataInputStream(servletConn.getInputStream());
        //get what you want from servlet
        //.......
        inputFromClient.close();
        salvarHD(document);
    }

No final eu pego o documento que foi gerado e salvo no HD, para ver se o que foi passado para o Servlet é igual ao que foi gravado no HD

O servlet que recebe o arquivo:

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // add connection closed header
        response.setHeader("Connection", "close");
        // Create PrintWriter object to write to
        PrintWriter out = response.getWriter();
        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm");
            String fileName = dateFormat.format(new Date())+".xml";
            String path = this.getServletContext().getRealPath(File.separator) + fileName;
            Logger.getLogger(UploadServlet.class.getName()).log(Level.INFO, path);
            File yourFile = new File(path);
            FileOutputStream toFile = new FileOutputStream(yourFile);
            DataInputStream fromClient = new DataInputStream(request.getInputStream());

            byte[] buff = new byte[1024];
            int cnt = 0;
            while ((cnt = fromClient.read(buff)) > -1) {
                toFile.write(buff, 0, cnt);
            }
            toFile.flush();
            toFile.close();
            fromClient.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Qualquer semelhança com um tópico que já existe no GUJ não é coincidência, peguei este código aqui em um tópico de 2008 que já foi resolvido.

Mas o meu problema é o seguinte:
Quando o arquivo enviado pelo Applet é menor que 2MB o arquivo não é gravado pelo servlet, se o arquivo for maior que 2MB o servlet salva o arquivo sem problemas… Quando olho o HD o arquivo foi salvo perfeitamente pelo salvarHD.

Já busquei vários exemplos, até em Fóruns americanos mas não encontro nenhum comentário desse tipo de problema.

Acho que estou esquecendo algum detalhe…

Criado 23 de setembro de 2010
Respostas 0
Participantes 1