Enviar bytes por servlet. É possível?

20 respostas
C

Eu gravo os vídeos e converto em bytes no celular, queria saber se tem como enviar esses bytes com servlet para o servidor.
Obrigado

20 Respostas

kinow

Você pode enviar em um form multipart/form-data via POST, que nem fazemos o upload de uma imagem. O servlet só tem que pegar os bytes recebidos pelo servidor e trabalhá-los.

Comece o projeto e poste aqui para irmos ajudando mais.

[]s :wink:

C

kinow:
Você pode enviar em um form multipart/form-data via POST, que nem fazemos o upload de uma imagem. O servlet só tem que pegar os bytes recebidos pelo servidor e trabalhá-los.

Comece o projeto e poste aqui para irmos ajudando mais.

[]s :wink:

Blz cara, vlw vo tenta aqui depois eu posto :wink:

C

Seguinte, pra enviar pra servlet to fazendo assim:

class UploadToServer extends Thread
    {
        public void run()
        {
            Upload();
        }

        public void Upload ()
        {
            HttpConnection http = null;
            OutputStream oStrm = null;
            InputStream iStrm = null;    
            boolean ret = false;
            
            String url = "127.0.0.1/ServerVideo";
            
            try
            {
                http = (HttpConnection) Connector.open(url);
                oStrm = http.openOutputStream();
             
              http.setRequestMethod(HttpConnection.POST); 
              
              http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

              byte data[] = ("teste=" + output).getBytes();
              oStrm.write(data);

              iStrm = http.openInputStream();      
     
              //ret = processServerResponse(http, iStrm);
              if (iStrm != null)
              iStrm.close();

              if (oStrm != null)
              oStrm.close();
              
              //if (http != null)

              http.close();
            }

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

Só que to em dúvida como pegar os bytes na servlet.

kinow

Eae crashov3r,

vi sua mensagem e vim dar uma olhada.

Hoje a noite vou tentar fazer o código de exemplo pra você, é que estou um pouco enrolado agora :wink:

[]ssss

C

ow blz cara, vlw…

kinow

Yo Crashov3r,

não tive tempo de abrir o Eclipse e codificar um bom exemplo pra você :( . Mas achei um exemplo na net que aposto que funciona.

Cliente

HttpConnection c = (HttpConnection) Connector.open("http://www.domain.com/url");
c.setRequestMethod(HttpConnection.POST);
byte[] data; 
// data should be filled with binary data to send
c.setRequestProperty("Content-Length", Integer.toString(data.length));
 
OutputStream sending = c.openOutputStream();
sending.write(data);
sending.close();

Servlet

// This is a sample
String strData = "name=" + game.getName() + "&score=" + game.getScore();
byte[] data = strData.getBytes();

Agora não entendi porque colocou em uma Thread... do jeito que está não rodaria sem parar diversas vezes seguidas?

[]ssss

C

Tpw, coloquei numa thread pq se ñ tava dando uns errinhos meio locos, mas de qualquer forma teria d usar pq to bolando uma ideia… não sei se vai dar certo, de tpw, enviar o video em tempo real enquanto é gravado. Não consegui pensar em outra alternativa, pois me falaram que eu não posso ter acesso aos bytes enquanto não parar a gravação. Então pensei em jogar essa thread em um laço… meio loco neh?

C

Iii cara, não saquei direito como pega os dados pela servlet, certeza q é o método pra pegar bytes do outputstream e enviar para a servlet?

C

Ninguem? :?

C

:cry:

Norxs

servlet

String xmlStr = new String();

				int ch;
				
				ByteArrayOutputStream bStrm = new ByteArrayOutputStream();
		       while ((ch = in.read()) != -1)
		        	bStrm.write(ch);
		        		        
		        xmlStr = new String(bStrm.toByteArray());
		        bStrm.close();
				
				ParserXml parse = new ParserXml(xmlStr);
				boolean isPersist = parse.persistXml();
				if(isPersist)
					out.write("OK");
				else{
					error = true;
				}
				return;
C
Norxs:
servlet
String xmlStr = new String();

				int ch;
				
				ByteArrayOutputStream bStrm = new ByteArrayOutputStream();
		       while ((ch = in.read()) != -1)
		        	bStrm.write(ch);
		        		        
		        xmlStr = new String(bStrm.toByteArray());
		        bStrm.close();
				
				ParserXml parse = new ParserXml(xmlStr);
				boolean isPersist = parse.persistXml();
				if(isPersist)
					out.write("OK");
				else{
					error = true;
				}
				return;

hum, blz...
eu to mandando os bytes assim:

byte data [] = output.toByteArray();
oStrm.write(data);

mas não entendi com que parte eu puxo os bytes enviados.

Norxs

use a Força … ehhehehe

tu não puxa nada … que se responsabilisa disso é o servlet

C

kkkkk, eu sei, mas um exemplo: quando eu pego uma string pela servlet eu uso:

no caso q vc me passou onde q é a parte q eu faço isso? :S

Norxs

tu vai pegar o request …o que recebe …

pra enviar tu usa o response

C

cara, tu ta passando ali pra pegar um inputstream? mas eu to mandando um output e ai?
ja aproveitando, eu to pensando em fazer isso pra um envio em tempo real de vídeo, to tentando transmitir os vídeos para uma servlet, vc teria alguma idéia melhor?

C

Mais alguem? :frowning:

P

Aqui não é Orkut para você ficar dando UP no seus posts. Tenho acompanhado e visto que tem usado desta prática.

Tenha paciência, pois alguém, alguma hora responde. Se todo mundo ficar dando UP que nem você, isto vira uma zona.

C

Aqui não é Orkut para você ficar dando UP no seus posts. Tenho acompanhado e visto que tem usado desta prática.

Tenha paciência, pois alguém, alguma hora responde. Se todo mundo ficar dando UP que nem você, isto vira uma zona.

Na boa… eu sei q isso aki naun eh orkut, soh perguntei se tinha mais alguem pra me ajuda, o topico eh me…
Se vc naun tah afim de me ajuda ou naun sabe ou nem quer saber… não atrapalhe

C
Achei um exemplo na net que faz upload do video gravado para o server, mas não entendi direito, alguem pode ajudar?
class UploadToServerThread extends Thread {

   public void run() {
      uploadVideo();
   }
   public void uploadVideo() {
      try {
         if ( output != null ) {
            byte[] bytes = output.toByteArray();
            DTOMediaStoreIn aDTOMediaStoreIn 
               = new DTOMediaStoreIn();
            aDTOMediaStoreIn.inpByteArray = bytes;
            aDTOMediaStoreIn.extension = 
               JMEUtility.findFileExtension(contentType);

            DTOMediaStoreOut aDTOMediaStoreOut =
               HttpCommandExecuter.getInstance().
                  executeHttp(aDTOMediaStoreIn);

            if ( aDTOMediaStoreOut != null ) {
               if ( aDTOMediaStoreOut.successFlag != null &&
                  aDTOMediaStoreOut.successFlag.equals("S") ) {
                  //Show success alert
               }
               else {
                  //...
               }
            }
            else {
               //...
            }
         }
         else {
            //...
         }
      }catch(Exception e) {
         e.printStackTrace();
         //...
      }

   }


private DTOMediaStoreOut storeMedia(DTOMediaStoreIn inDTO) {
      
   System.out.println("Inside Media Store...");
   DTOMediaStoreOut ret = new DTOMediaStoreOut();
   ret.successFlag = "X";
   if ( inDTO != null ) {
         
      String currentNo = getCurrentNo();
         
      FileOutputStream aFileOutputStream ;
      try {
         aFileOutputStream = 
            new FileOutputStream(fileLocationBase + "/" + 
                  currentNo + "." + inDTO.extension);
         aFileOutputStream.write(inDTO.inpByteArray);
         aFileOutputStream.close();
         ret.successFlag = "S";
         System.out.println("Successfully stored the content");
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }         
   }      
   return ret;
}

    
    }
}
Criado 14 de novembro de 2008
Ultima resposta 25 de nov. de 2008
Respostas 20
Participantes 4