Bom, eu estou fazendo um programa que faz upload de arquivos a um server, já consegui fazer o programa enviar os arquivos ao server usando HttpURLConnection mas o problema é que enquanto o upload acontece não há qualquer tipo de “feedback”, digo, preciso que o meu programa monitore o upload, pelo menos, que ele seja capaz de saber quantos bytes ja foram enviados.
Este é o meu codigo até agora:
public void post(UploadToken ut)
{
HttpURLConnection conn = null;
String data = encodeData(ut);
try{
byte[] bytedata = data.getBytes("ISO-8859-1");
URL url = new URL(ut.getURL());
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty( "User-Agent", agent );
conn.setRequestProperty( "Content-Type", type );
conn.setRequestProperty( "Content-Length",Integer.toString(bytedata.length,10));
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
for(int i=0;i<bytedata.length;i++)
{
os.write(bytedata[i]);
os.flush(); // não adianta usar flush, nada acontece
}
System.out.println("è aqui que os bytes começam a ser enviados de fato");
InputStream in = conn.getInputStream();
System.out.println("esta linha não é executada até que todos os bytes sejam enviados");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = br.readLine()) != null)
{
parent.response(line);
}
os.close();
br.close();
}catch(IOException ioe)
{
int code = -1;
try{code = conn.getResponseCode();}catch(Exception e){System.out.println(e);}
System.out.println(ioe+ " httpconnection:"+code);
parent.getInfo().setStatus(UploadInfo.ERROR);
}
}
Eu sei que parece estranho mas acontece exatamente como esta escrito no codigo, apenas quando conn.getInputStream() é executado é que os bytes são enviados.