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…