Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Como enviar imagem para um WebService ?

Diogo,

Preste atenção: estamos tentando te dizer que o Multipart existe *justamente* para enviar várias coisas diferentes em uma requisição só, exatamente como você precisa.
A imagem não vai estar dentro do JSON, mas vai estar na mesma requisição que ele.

On May 28, 2013 3:31 PM, "Diogo Henrique" <diogjp10@gmail.com> wrote:
Nesse caso Henrique eu teria que fazer dois envios. O primeiro método eu enviaria o meu objeto Pessoa com seus atributos e tal como no método inserirMensagem() que eu postei la em cima usando o método post() que eu postei la em cima também. O segundo método seria esse método que você postou, só que enviando apenas a imagem. a  String caminhoImagem seria o caminho da imagem no SDCARD e a  String url seria o método la no meu WS.

No meu WS esse método seria...

        @POST
        @Consumes("image/png")
        public void upload(InputStream stream) {
           
          //aqui eu salvaria a imagem em algum lugar...

        }



ou eu estou querendo d+ em fazer apenas um método que recebe o objeto Pessoa e dentro desse objeto Pessoa ter um atributo/propriedade que seja do tipo InputStream e que na hora de mandar ele como @Consumes("application/json") eu faria um pessoa.getInputStream() e armazenava ela aonde eu  quiser no servidor... viajei ? kkkkkkkkk


Diogo Henrique
Rede Sociais: 






Em 28 de maio de 2013 13:31, Henrique Melo <henrique1985@gmail.com> escreveu:
Enviar dessa forma era justamente o que queríamos evitar...
Eu envio dessa forma


public final String[] postImagem(String url, String caminhoImagem) {
String[] result = new String[2];
try {

File file = new File(caminhoImagem);
if (file.exists()) {
HttpPost httpPost = new HttpPost(new URI(URL_WS + url));

FileBody bin = new FileBody(file);

MultipartEntity reqEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("file", bin);
httpPost.setEntity(reqEntity);

HttpResponse response;
response = HttpClientSingleton.getHttpClientInstace().execute(
httpPost);

HttpEntity entity = response.getEntity();

if (entity != null) {
result[0] = String.valueOf(response.getStatusLine()
.getStatusCode());
InputStream instream = entity.getContent();
result[1] = toString(instream);
instream.close();
Log.d("post", "Result from post JsonPost : " + result[0]
+ " : " + result[1]);
}
}else{
result[0] = "200";
result[1] = caminhoImagem+" não encontrado.";
}
} catch (Exception e) {
Log.e("NGVL", "Falha ao acessar Web service", e);
result[0] = "0";
result[1] = "Falha de rede!";
}
return result;
}



Em 28 de maio de 2013 12:09, Jonathans Coelho <jonathancoelho@gmail.com> escreveu:

tenta isso

    // convert from bitmap to byte array  public byte[] getBytesFromBitmap(Bitmap bitmap) {      ByteArrayOutputStream stream = new ByteArrayOutputStream();      bitmap.compress(CompressFormat.JPEG, 70, stream);      return stream.toByteArray();  }    // get the base 64 string  String imgString = Base64.encodeToString(getBytesFromBitmap(someImg),                          Base64.NO_WRAP);
    
Ai é só mandar a imagem como string.

Em 28 de maio de 2013 12:46, Diogo Henrique <diogjp10@gmail.com> escreveu:

Por exemplo... hoje eu mando um objeto Mensagem da seguinte forma para o WS RestFul

public String inserirMensagem(Mensagem mensagem) throws Exception {
    
    Gson gson = new Gson();
    String MensagemJSON = gson.toJson(mensagem);
    String[] resposta = new WebServiceMensagem().post(URL_WS + "inserir", MensagemJSON);
    if (resposta[0].equals("200")) {
        return resposta[1];
    } else {
        throw new Exception(resposta[1]);
    }
   }


O método no WS está assim...

        @POST
@Path("/inserir")
@Produces("application/json")
@Consumes("application/json")
public String inserirMensagem(Mensagem mensagem) {
return new MensagemBusiness().inserir(mensagem);
}


A classe MensagemBusiness faz o insert na base de dados. No caso eu queria criar um novo objeto como por exemplo Pessoa....
public class Pessoa { nome,telefone,imagem } 
Com seu Business, e DAO como esse objeto Mensagem ai. Minha dúvida e como eu vou modificar o método post para pode enviar tanto as informações do objeto Pessoa (como nome,telefone,etc) como a imagem também sem modificar drasticamente a estrutura/lógica do WS... por exemplo... o post desse objeto Mensagem...

public final String[] post(String url, String json) {
    String[] result = new String[2];
    try {

        HttpPost httpPost = new HttpPost(new URI(url));
        httpPost.setHeader("Content-type", "application/json");
        StringEntity sEntity = new StringEntity(json, "UTF-8");
        httpPost.setEntity(sEntity);

        HttpResponse response;
        response = HttpClientSingleton.getHttpClientInstace().execute(httpPost);
        HttpEntity entity = response.getEntity();

        if (entity != null) {
            result[0] = String.valueOf(response.getStatusLine().getStatusCode());
            InputStream instream = entity.getContent();
            result[1] = toString(instream);
            instream.close();
            Log.d("post", "Result from post JsonPost : " + result[0] + " : " + result[1]);
        }

    // ......  e só return e tratamento de erro


@Jonathans Coelho não encontrei nada a respeito na web. Você tem algum link pra indicar ? 



Diogo Henrique
Rede Sociais: 






Em 28 de maio de 2013 10:52, Fred <fredferrao@gmail.com> escreveu:

//troll
Manda por sedex q chega mais rápido.

Nao resisti hehe, sei que deve ter sido o corretor.




Em 28 de maio de 2013 09:47, Henrique Melo <henrique1985@gmail.com> escreveu:

Não necessariamente.
Como vc vai mandar um formulário via postal,  vc pode mandar o file e outros elementos.
Logo mais eu posto como foi a minha solução.

Em 28/05/2013 08:56, "Diogo Henrique" <diogjp10@gmail.com> escreveu:
Então eu vou ter que fazer bem diferente de como eu faço não e ? porque hoje eu mando um Objeto. No caso eu vou ter que mandar esse Objeto e depois a imagem.. não e ? ou eu to viajando ?

Diogo Henrique
Rede Sociais: 






Em 28 de maio de 2013 00:31, Ernani Joppert Pontes Martins <joppert@gmail.com> escreveu:
Via http post, vc faz um post com multipart/form-data e encapsula o arquivo como file...

[]'s

Ernani


2013/5/27 Diogo Henrique <diogjp10@gmail.com>


            @POST
   @Consumes(MediaType.MULTIPART_FORM_DATA)
   public Response uploadFile(
       @FormDataParam("file") InputStream uploadedInputStream,
       @FormDataParam("file") FormDataContentDisposition fileDetail) {
 
       String uploadedFileLocation = "c://uploadedFiles/" + fileDetail.getFileName();
 
       // save it
       saveToFile(uploadedInputStream, uploadedFileLocation);
 
       String output = "File uploaded via Jersey based RESTFul Webservice to: " + uploadedFileLocation;
 
       return Response.status(200).entity(output).build();
 
   }



Mais como eu passaria essa imagem para esse método do Web Service ? Nesse Web Service que uso eu passo um objeto via JSON. Como eu vou mandar um Objeto com suas informações + a imagem ? tem como ?
No Android eu pego a imagem assim... logo quando o cara tira a foto....

Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] imageData, Camera c) {

if (imageData != null) {
BitmapFactory.Options options=new BitmapFactory.Options();
                 options.inSampleSize = 5;
Bitmap myImage = BitmapFactory.decodeByteArray(imageData, 0,
                         imageData.length,options);
FileUtilities.StoreByteImage(imageData,"foto1", "PNG");
finish();
}
}
};







Diogo Henrique
Rede Sociais: 






Em 27 de maio de 2013 15:15, Diogo Henrique <diogjp10@gmail.com> escreveu:

Vai @Diego vou testar isso =D
@Thiago kkkkkk porque ta fácil ? E só aplicar o multiplart ? 

Diogo Henrique
Rede Sociais: 






Em 27 de maio de 2013 11:07, Thiago Catoto <tcatoto@gmail.com> escreveu:

Diogo,

Tá fácil! =D

"Keep it up!"

-- Catoto


2013/5/27 Diogo Henrique <diogjp10@gmail.com>
@Jonas,@Thiago eu não usei nenhum framework para fazer o Web Service. Eu utilizo o Jax-RS e Jersey. O Web Service e em Java sim, eu usei tutorial do antunes do Portal Android... segue o link http://www.portalandroid.org/comunidade/viewtopic.php?f=7&t=17389

@Diego, você tem o link pra compartilhar ? Eu achei esse aqui http://puspendu.wordpress.com/2012/08/23/restful-webservice-file-upload-with-jersey/ poderia ser uma solução ?

Diogo Henrique
Rede Sociais: 






Em 26 de maio de 2013 20:48, Thiago Catoto <tcatoto@gmail.com> escreveu:

O WS eh em Java? Vc fez usando algum framework?

-- Catoto

On May 26, 2013 6:40 PM, "Diogo Henrique" <diogjp10@gmail.com> wrote:
Olá pessoal, estou precisando enviar uma imagem tirada da câmera para um Web Service. Esse Web Service já existe, eu mesmo o criei e tal mas nunca foi necessario receber uma imagem. Pesquisando eu encontrei o esse link http://www.decom.ufop.br/imobilis/?p=889 ele ensina como mandar uma imagem para o Web Service, mas não fala o que fazer no Web Service para receber essa image. Alguém já passou por isso ? Meu Web Service e RESTFul.



Diogo Henrique
Rede Sociais: 




--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
"Frederico Ferrão da Silva"

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
Att.

Jonathan Coelho
Programador
Simber Tecnologia

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
Henrique Nogueira de Melo
Analista e Arquiteto de Software

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário