I'm developing a mobile application that has a form where the user can attach an image, the image is being sent as a string via rest to the server and saved in the blob-type database, however, I'm having trouble converting from string to blob from the side of my api.
Capturing application image via camera:
public void tirarFoto(View view){
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(data != null){
Bundle bundle = data.getExtras();
if(bundle != null){
Bitmap img = (Bitmap) bundle.get("data");
Toast toast = Toast.makeText(getApplicationContext(), "Foto anexada", Toast.LENGTH_LONG);
toast.show();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
img.compress(Bitmap.CompressFormat.JPEG, 100, stream);
foto = Base64.encodeToString(stream.toByteArray(), Base64.DEFAULT);
}
}
}
Sending to my API:
public void registerForms() {
final String address = frua.getText().toString().trim();
final String district = fbairro.getText().toString().trim();
final String city = fcidade.getText().toString().trim();
final String email = femail.getText().toString().trim();
final String complement = fcompl.getText().toString().trim();
final String state = festado.getText().toString().trim();
final String note = fobs.getText().toString().trim();
final String countries = fpais.getText().toString().trim();
progressDialog = ProgressDialog.show(DenunciaActivity.this, "Aguarde um momento", "Enviando...", true, false);
StringRequest stringRequest = new StringRequest( Request.Method.POST, REGISTER_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response.contains("Erro")) {
progressDialog.dismiss();
Toast.makeText( DenunciaActivity.this, "Erro ao enviar", Toast.LENGTH_LONG ).show();
} else {
progressDialog.dismiss();
Intent intent = new Intent(DenunciaActivity.this, MainActivity.class);
Toast.makeText( DenunciaActivity.this, "Enviado com sucesso!", Toast.LENGTH_LONG ).show();
startActivity(intent);
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressDialog.dismiss();
Toast.makeText( DenunciaActivity.this, error.toString(), Toast.LENGTH_LONG ).show();
Log.i( TAG, "Lat: " + error );
}
} ) {
@Override
protected Map<String, String> getParams() {
Map<String, String> map = new HashMap<String, String>();
map.put( KEY_USERNAME, name );
map.put( KEY_DATE, dataFormatada );
map.put( KEY_STATE, state );
map.put( KEY_CITY, city );
map.put( KEY_DISTRICT, district );
map.put( KEY_ADDRESS, address );
map.put( KEY_EMAIL, email );
map.put( KEY_COMPLEMENT, complement );
map.put( KEY_COUNTRIE, countries );
map.put( KEY_LAT, String.valueOf( latitude ) );
map.put( KEY_LONG, String.valueOf( longitude ) );
map.put( KEY_NOTE, note );
map.put( KEY_STATUS, "ATIVO" );
map.put( KEY_IMAGE, foto );
Log.i( TAG, "Lat: " + longitude +" "+latitude);
return map;
}
};
RequestQueue requestQueue = Volley.newRequestQueue( this );
requestQueue.add( stringRequest );
}
My API:
public class Services extends Controller {
public static void denuncia(@Valid String nome, String data, String rua, String bairro, String complemento,
String cidade, String estado, String pais, String observacao, String email, String latitude,
String longitude, Status status, String foto) {
if (validation.hasErrors()) {
String mensagem = "Erro ao cadastrar";
JsonObject j = new JsonObject();
j.addProperty("Erro", 404);
j.addProperty("msg", mensagem);
renderJSON(j);
} else {
byte[] decodedBytes = Base64.decodeBase64(foto);
String msgsucess = "Cadastrado com sucesso!";
Denuncia denuncia = new Denuncia();
denuncia.nome = nome;
denuncia.data = data;
denuncia.rua = rua;
denuncia.bairro = bairro;
denuncia.complemento = complemento;
denuncia.cidade = cidade;
denuncia.estado = estado;
denuncia.pais = pais;
denuncia.observacao = observacao;
denuncia.email = email;
denuncia.latitude = latitude;
denuncia.longitude = longitude;
denuncia.status = status;
if(foto == null) {
denuncia.foto = null;
}else {
denuncia.foto = decodedBytes;
}
denuncia.save();
JsonObject j = new JsonObject();
j.addProperty("Success", 200);
j.addProperty("msg", msgsucess);
renderJSON(j);
}
}
}
My model:
public Blob foto;