Bien el tema en sí es un poco complejo pero con un poco de orden podemos lograrlo hacer muy fácilmente. Decir, antes de continuar, que también he creado una nueva tabla en la base de datos llamada "imagenes", la cual la componen un campo ID(primary key y auto incremento) y un campo imagen (Varchar) donde almaceno el nombre, OJO, no la ruta, el nombre de la imagen.
Antes de empezar agregamos permisos a nuestra aplicación:
Posteriormente agregamos la librería httpmine de Apache
httpmine-4.2.5.jar
Creamos una carpeta en nuestro servidor, en mi caso "imágenes". Si ya la tienes creada, ni caso a este punto.
Ahora creamos nuestro archivo xml con los componentes que desee cada uno. En mi caso se compondrán de:
- ImageButton: Para lanzar nuestra cámara.
- EditText: Para nombrar nuestra imagen
- ImageView: Para mostrar la imagen obtenida.
- Button: Para subir la imagen a nuestro servidor.
Tras realizar nuestro .xml nos vamos a nuestra clase y declaramos los atributos que vamos a necesitar:
Como veis tenemos declarados nuestros 4 componente:
- ImageButton camara
- ImageView imagen
- EditText nombreImagen
- Button upload
y otros 3 que vamos a ir utilizando a lo largo de este tema:
- Uri output.
- String foto
- File file.
Una vez llegados hasta aquí creamos un método para activar la cámara del dispositivo:
- Primeramente almacenamos en la String foto la ruta donde se va a guardar nuestra imagen, en el dispositivo, con el nombre que hayamos elegido.
- foto = Environment.getExternalStorageDirectory() +"/" +nombreImagen.getText().toString().trim()+".jpg";
- Pasamos nuestra String foto a File.
- file=new File(foto);
- Creamos un Intent que accederá a la cámara de nuestro dispositivo.
- Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- Pasamos nuestro File a Uri.
- output=Uri.fromFile(file);
- Le pasamos a nuestro Intent la orden de almacenar en el dispositivo la imagen, y el Uri con la ruta de la imagen.
- intent.putExtra(MediaStore.EXTRA_OUTPUT, output);
- Nos abre una nueva Activity con nuestra cámara y almacena el resultado para procesarla en el método sobreescrito starActivityForResult(parametro1,parametro2).
- startActivityForResult(intent, 1);
- El 1 es para indicar que queremos acceder a la cámara.
Bien, con este método se nos abrirá la cámara de nuestro dispositivo y al obtener una imagen el método startActivityForResult se encargará de procesarla y mostrarla en nuestro ImageView:
- Creamos un objeto de la clase ContentResolver que nos dará acceso al contenido almacenado en la app.
- ContentResolver cr=this.getContentResolver();
- Creamos un objeto de la clase Bitmap para manejar nuestra imagen que hemos obtenido de nuestra cámara.
- Bitmap bit=android.provider.MediaStore.Images.Media.getBitmap(cr, output);
- Le pasamos por argumentos nuestro objeto ContentResolver para permitir el acceso y nuestro Uri indicándole en que ruta está.
- Una vez hecho esto, le indicamos en que orientación debe estar, esto de por si no lo hace android, tenemos que crear un código para indicar que si una imagen se obtiene en posición landscape u horizontal nos la tiene que mostrar en landscape u horizontal en nuestro ImageView. Esto lo podemos conseguir por medio de un switch y de la siguiente manera:
- Creamos una variable de tipo int que almacenara los grados que debe ser rotada la imagen.
- int rotate=0;
- Creamos un objeto ExifInterface que se encargará de evaluar en que orientación esta nuestra imagen
- ExifInterface exif = new ExifInterface(file.getAbsolutePath());
- Le pasamos por argumentos la ruta absoluta de nuestra imagen.
- Creamos y almacenamos la orientación que nos devuelve ExifInterface:
- int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
- Con un switch le damos un valor a rotate según el valor devuelto por ExifInterface:
- switch (orientation) {
- case ExifInterface.ORIENTATION_ROTATE_270:
- rotate = 270;
- break;
- case ExifInterface.ORIENTATION_ROTATE_180:
- rotate = 180;
- break;
- case ExifInterface.ORIENTATION_ROTATE_90:
- rotate = 90;
- break;
- }
- Creamos un objeto de la clase Matrix que será la encargada de transformar nuestra imagen y rotarla en su posición.
- Matrix matrix=new Matrix();
- Le pasamos la rotación que queremos que tenga:
- matrix.postRotate(rotate);
- Le indicamos a Bitmap la nueva configuración de la imagen:
- bit = Bitmap.createBitmap(bit , 0, 0, bit.getWidth(), bit.getHeight(), matrix, true);
- Finalmente insertamos nuestra imagen procesada a nuestro ImageView
- imagen.setImageBitmap(bit);
Bien, hecho esto le damos a nuestro ImageButton la acción para iniciar la cámara:
Esta acción comprueba que el Edittext nombreImagen no esté vacío, si lo está, nos manda un Toast de aviso, si no, iniciará la cámara.
Con todo esto ya podremos hacer fotos e ir mostrándolas en nuestro ImageView.
Para subir nuestra imagen a servidor necesitaremos:
- Un método que conecte con un WebService
- Un WebService que guarde nuestra imagen.
- Una clase AsyncTask para ejecutarlo todo.
Nuestro método quedaría de la siguiente forma:
- Creamos un objeto DefaultHttpClient para realiza la conexión a nuestro WebService.
- HttpClient httpclient=new DefaultHttpClient();
- Le cambiamos los parámetros (normalmente utilizamos los valores por defecto, en este caso no)
- httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
- Creamos un objeto HttpPost y le pasamos la ruta de nuestro WebService en el servidor por el construtor.
- HttpPost httppost = new HttpPost("http://192.168.0.11/picarcodigo/upload.php");
- Creamos un objeto de MultipartEntity, la cual se encuentra en la librería que os pasé antes. Se encargará de ayudarnos a subir el archivo almacenándolo (en temas anteriores vimos que utilizábamos BasicNameValuePair para almacenarlos).
- MultipartEntity mpEntity = new MultipartEntity();
- Creamos un objeto FileBody el cual ayudará a subir el contenido indicando, por constructor, el archivo a subir y el tipo, en este caso una imagen en formato jpg ("image/jpeg").
- ContentBody foto = new FileBody(file, "image/jpeg");
- Le pasamos en contenido almacenado en FileBoody y se lo pasamos MultipartEntity para que lo almacene
- mpEntity.addPart("fotoUp", foto);
- Pasamos el objeto mpEntity y lo almacenamos en nuestro httppost
- httppost.setEntity(mpEntity);
- Ejecutamos nuestro httpclient pasándole toda la información necesaria por httppost
- httpclient.execute(httppost);
- Una vez ejecutado todo, obtenemos la conexión y la cerramos.
- httpclient.getConnectionManager().shutdown();
Bien, es un poco complejo, pero siguiendo los pasos es sencillo. Veamos como queda nuestro WebService:
Bien, un poco distinto a lo visto en otros temas:
- Le indicamos cual va a ser la ruta que va a tener en nuestro servidor, recordar que mi carpeta se llamaba imagenes.
- $ruta = "imagenes/" .basename($_FILES['fotoUp']['name']);
- A la variable $_FILES se le adjudicara la ruta y el nombre.
- Creamos una condición if y con la ayuda del método move_uploaded_file movemos la imagen desde nuestro dispositivo al servidor.
- if(move_uploaded_file($_FILES['fotoUp']['tmp_name'], $ruta))
- Este método tiene 2 parámetros, el primero es de donde viene el archivo y el segundo es donde va a ser copiado.
- Damos permisos al archivo por medio del método chmod
- chmod ("uploads/".basename( $_FILES['fotoUp']['name']), 0644);
- 2 parámetros, el tipo de archivo, y los permisos, 0644 en este caso. El 6 para administrador, el primer 4 para grupos y el segundo 4 para usuarios (creo que es así, no estoy muy puesto en permisos)Adjunto tabla de la wikipedia:
Bien, así queda nuestro WebService, pongámoslo todo a correr en un AsyncTask:
Bien nuestra clase AsyncTask va a utilizar los métodos onPreExecute y onPostExecute, los cuales realizan acciones antes y después de la acción del método doInBackground() respectivamente.
En el método onPreExecute creamos un progressDialog que se mostrará mientras se sube nuestra imagen, y lo cerramos en el on PostExecute una vez realizada la acción de doInBackground.
En el método doInBackground llamamos al método uploadFoto y le pasamos por parámetro la url de nuestra imagen. Posteriormente, y como dije al principio del tema insertaremos el nombre de la imagen en una tabla de la base de datos.
No voy a explicar lo que hace el método insertar, ni su WebService, os pongo las imágenes y si queréis saber como funciona exactamente podéis visitar la PARTE 1.
Método onInsertar():
WebService InsertImagen.php
Hecho esto, le damos la acción a nuestro botón Upload:
Comprobamos que el archivo existe, y si es así, nos ejecuta toda la parafernalia.
Bien, espero que no haya sido mucho lío ni mucha confusión. Este código funciona, estar seguro de que tenéis vuestro servidor correctamente configurado cuando ejecutéis.
Aquí os dejo los archivos (xml, .java y .php): WebServiceUploadImage
Un saludo.
Hola!! Excelente explicación.
ResponderEliminarPero que crees, sólo me inserta en la BD, pero nunca en la carpeta de mi servidor =(
Y en LogCat solo notifica algo como 05-26 10:52:32.771: E/StatusBarPolicy(1612): ecio: 37
No sé que signifique, ojala puedas ayudarme, Gracias!!
Buenas Karina.
EliminarAlgún error he tenido alguna vez por no tener puestas bien las rutas donde van las imágenes, pero no tiene porque ser tu caso, aún así revísalo, comprueba también que tipo de excepción te salta, y si no te salta, es posible que el error esté o bien en el servidor o en el archivo php, así acotamos el fallo.
Tendrás que enviarme todo el log que reporta tu aplicación. Puedes enviármelo a bartolomeabellan@gmail.com, o bien pegarlo aquí. Solo con E/StatusBarPolicy(1612) no te puedo ayudar.
Un saludo.
Hola amigo esto funciona para cualquier tamaño del archivo? o solo 1M?
Eliminarbroo puedes pasarme el código, te agradecería bastante!
ResponderEliminarAl final del post esta el enlace de descarga bro, hay que leer hasta el final. Suerte
EliminarUn saludo
Me refería al proyecto de eclipse completo, tengo muchos problemas al pasarlo a un proyecto. te dejo mi correo d.villamarin9@gmail.com
EliminarMuchas gracias
Bartolomé solo me funciona lo de la base de datos pero no la envía al servidor, pero el log no me lanza ningun error y el php esta tal cual el tuyo pero con la ruta de mi carpeta en el servidor...no sabes que puede ser...
ResponderEliminarahhhhhhhhh karina si lo pudiste resolver avisame como porfavor :)
Buenas Jorge, ¿Cuando pulsas uploads te sale el mensaje de "imagen subida con exito"? Si es así, el código funciona bien y el problema debería de estar en tu servidor. Si no es así, es decir, no te muestra el mensaje del éxito al subir tu imagen, hay que comprobar el código.
EliminarA veces me olvido de que yo pruebo todos estos tutoriales en un xperia Z que tiene una capacidad de memoria muy alta. Prueba a poner este código que te paso en el método "onActivityResult" entre el switch y la clase matrix:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
bit = BitmapFactory.decodeFile(foto, options);
Android gestiona muy mal imágenes muy pesadas y con resoluciones elevadas, si lo pruebas en un dispositivo con poca memoria (512mb mas o menos) es posible que falle, aunque yo tengo un dispositivo (xperia arc) con 512mb y no me ha creado ningún problema.
Seguiré investigando un poco a ver cual puede ser el problema. Aunque comprueba si el problema puede ser de código (comprobando lo que te dije antes) o del servidor.
Si hay alguien que lo haya probado y le funcione, que lo diga. Yo os subiré imágenes de como me funciona a mi.
Un saludo.
PD: Comprueba el cortafuegos de windows y el de tu router, desactivalos no vaya a ser que el problema esté por ahi (yo los tengo desactivados).
voy a probar y te aviso...yo estoy trabando con un xperia L....
ResponderEliminartenias razón Bartolomé era solo un error en mi servidor....te pasaste por el tutorial muchas gracias... oye tu sabes ahora como puedo hacer para mostrar la imagen que subí en el dispositivo????
ResponderEliminarJorge disculpa como supiste que era poblema en el servidor? y como se soluciona?
EliminarHola, por si aun no lo resuelves, yo tube el mismo problema, lo solucione dandole permiso total a la carpeta, estoy trabajando en linux asi q desde consola ejecute el comando sudo chmod 777, de esta forma ya empezo a guardar correctamente las imagenes, si estas en windows dale click derecho y quitar la opcion solo lectura por si esta habilitada, de otra forma averigua sobre los permisos requeridos en tu sistema, suerte.
EliminarExcelent aportacion si me funciono una pregunta como lo puedo hacer ahora seleccionando la imagen desd la galeria i subir al servidor la imagen
ResponderEliminarse hacen los registros a la base de datos y me sale que la imgane fue cargada con exito,.....pero no la pone en dicha carpeta imagenes....ya no se que mas probar/...en verdad esta igual el codigo apuntando a mi server web,,,,,que sera? en verdad necesito el ejercicio
ResponderEliminarBuenas, tiene pinta de ser problema de permisos, vete a tu servidor, pincha con botón derecho sobre tu carpeta imagen y le das a propiedades, alli desactiva la opción de "solo lectura", si la tienes desactivada, comprueba que la carpeta de tu servidor la tenga desactivada también.
EliminarMe han llegado muchos emails preguntandome por el mismo problema que tu, y en el 90% ha sido por este problema, si no es asi, avisame y te ayudo en lo que pueda.
Bartolome muchisimas gracias por contestar. Ya cambie de 0715 a 0777 (todos los permisos) en permisos tanto la carpeta de servidor como la carpeta de imagenes y nada...no las sube... el .php invoca uploads/ ......eso de que trata? sera la extension jpg....aunque mi movil genera las imagenes .jpg......no se que puede ser?
EliminarBartolome ..no uso localhost.....yo tengo el webservice y la carpeta imagenes en un servidor remoto....sera por eso? faltara algo en el manifest?
EliminarQue el servidor sea remoto no es un problema, he estado trabajando con un servidor alojado en filipinas y no tuve ningún problema, aunque cierto es, que, a mi me lo dieron todo hecho, es decir, el administrador del servidor me dio todos los permisos y accesos y funcionó correctamente.
EliminarRespecto a tu duda de si falta algo en el manifest, la respuesta es no, ya que te da éxito tanto al escribir en la DB como al subir la imagen. Si el manifest tuviese algún problema de permisos (como el de internet), directamente se te inmola cuando intenta ejecutarse.
Me han llegado varios emails con el mismo problema que tu, en el 90% de los casos el problema ha sido que la carpeta imagenes estaba marcada como "solo lectura", el otro 10% eran problemas de configuración del servidor(no abrian bien los puertos, o tenian programas utilizando los mismo puertos que el servidor, normalmente el 80 o 8080, y cosas así). Yo personalmente, creo que es cosa de permisos, pero me dices que los cambiastes a 0777 y te creo, así que no se decirte, lo único, mandame el logcat cuando lo ejecutes, a ver que dice....
Suerte
Un saludo
ok voy a mirar logcat...pero antes bartolome una pregunta...esa linea en upload.php que dice chmod uploads/ eso es una carpeta? es que estoy empezando en android
EliminarY muchas gracias por tu paciencia y atencion!!
EliminarDe nada, para eso estamos.
EliminarCuando yo le digo chmod uploads/ le estoy dando permisos al archivo, es decir, le hago saber al servidor que el archivo que he subido (uploads/) va a tener los permisos indicados. Realmente, no creo que afecte a tu servidor, solo al archivo que ha sido subido.
Un saludo
hola Bartolome, solo con una duda, la ruta de uploads/ no la entiendo, es donde tienes las imagenes en el movil android n0???
EliminarBuenas Yoban;
EliminarEsa ruta pertenece al servidor, es decir, yo tengo una jerarquía de carpetas de la siguiente forma: root/picarcodigo/uploads/imagenes.
Cuando yo subo un archivo a la carpeta imágenes, le doy permisos de lectura y escritura a uploads, ya que de esta forma no me dará problemas al insertar u obtener archivos (en este caso imágenes) que estén dentro de esta. Y si te preguntas por que le doy permisos a uploads y no a imágenes, te diré que si yo tengo 20 carpetas dentro de uploads, debería escribir mucho código para dar permisos a todas ellas cada vez que subo un fichero, por lo tanto se los doy a uploads y ya el resto de carpetas en su interior obtendrán los permisos de esta.
Un saludo espero haberte ayudado.
Hola estoy haciendo lo mismo para subir una imagen almacenada en la memoria sd y cuando la intento subir al servidor la aplicacion se cierra, tengo los permisos tal como esta al inicio del blog, alguien me puede ayudar.
ResponderEliminarBuenas Luis, me tendrías que mandar el log que produce para poder ayudarte, asi, a palo seco, no se que le pasa. Mandame el log a bartolomeabellan@gmail.com y vemos por que te hace crash la app.
EliminarUn saludo.
Buenas, vete a la carpeta "imagenes" de tu servidor, pinchale con botón derecho y le das a propiedades, y mira a ver si tienes marcado la opción de "solo lectura" en la carpeta, si es así desactivala, si no es así y no está marcada como "solo lectura", comprueba que la carpeta de tu servidor no esté marcada como "solo lectura".
ResponderEliminarSuerte, avisame si te funciona o no.
Un saludo.
Buenas, la carpeta imagenes ya tenia en permisos 777, ahora en la carpeta del servidor tambien le he dado permisos 777 y sigue sin funcionar. Los archivos PHP son los mismos que los de la página cambiados para que se conecten a mi servidor. ¿Que puedo estar haciendo mal?
ResponderEliminarUn saludo.
Buenas, ya lo solucione, simplemente tenia la carpeta imagenes en el sitio equivocado, aun asi muchas gracias por la ayuda y tu tiempo!
ResponderEliminarUn saludo.
Es cierto, me lo comentaste en el primer mensaje, lo siento, no lo lei bien, me alegro de que te funciones.
ResponderEliminarUn saludo.
donde debe estar creada la carpeta "imagenes", en que ruta del servidor?
ResponderEliminarte agradezco de principio Bartolomé
ResponderEliminarLa carpeta "imagenes" debe estar dentro de la carpeta de tu servidor, en mi casa dentro de la carpeta "picarcodigo" que tengo en mi servidor.
EliminarUn saludo.
Excelente, Muchas gracias me funcionó correctamente... Bendiciones!!!
EliminarDisculpa Bartolomé, si deseo tomar una segunda foto al instante despues de tomar la primera, como comparo si la imagen que voy a volver a tomar tiene el mismo nombre que la imagen que ya se encuentra en ruta por defecto que guarda la galería?
ResponderEliminargracias,
Si deseo eliminar esa imagen que cargue en el servidor desde el movil como seria?
ResponderEliminarComo hago para cambiar la ruta de guardado de esas imágenes en el archivo PHP de mi web service?. Es decir mi ruta seria C:\proyectos\agua\imagenes.
ResponderEliminarTe lo agradezco enormemente
para empezar instala PHP, me imagino que no lo tienes instalado, de ser así sabrías la ruta
EliminarBartolome, Muchas gracias buen tutorial, podrias explicar como mostrar la imgen en el dispositivo movil y poder borrarla desde allí. o si sabes de algun sitio donde pueda encontrar esto te lo agradezco
ResponderEliminarHola Bartolome, serias tan amable de pasarme la clase MultipartEntity y la clase ContenBody! URGE :cccc
ResponderEliminarGRACIAS SALUDOS! :D
Buenas, al principio del post pongo para descargar una libreria (httpmine-4.2.5.jar), en esa librería están las clases que se necesitan.
EliminarUn saludo, siento la tardanza.
Hola Bartolome, mi nombre es Francisco Javier, queria comentarte lo que me pasa y es que creo toda la aplicacion tal cual , le doy un nombre a la imagen y me dice que la aplicacion se ha cerrado de forma imprevista no se porque si me pudieras ayudar he hecho de todo poner el nombre de la foto con extension sin el y nada al darle al boton upload me pone el mensaje.
ResponderEliminarEstoy creando una aplicacion y lo de subir el nombre a la base de datos me daria igual pero si necesito saber porque se me cierra el programa y no me funciona, te agradceria me ayudaras, yo he colocado la direccion de subida de la forma
http://www.ffffffff.es/imagenes/upload.php, donde imagenes es la carpeta donde se me almacenaran las fotos y ahi tambien tengo el php upload que me he bajado de el archivo y que tu das.
muchas gracias
Un saludo
Buenas Francisco Javier;
EliminarLa cosa es que el archivo upload yo lo tengo puesto fuera de la carpeta imagenes, me explico;
En mi carpeta htdocs de apache creo una carpeta llamada "picarcodigo", dentro de esa carpeta tengo la carpeta imagenes y los archivos .php
La url que utilizo para subir las imágenes es "http://localhost/picarcodigo/upload.php" ya que en el archivo upload.php ya va dentro la ruta de mi carpeta imagenes, por lo tanto si tu tienes una carpeta imagenes y dentro el archivo upload.php, te va a buscar una carpeta imagenes donde este situado tu upload.php, al no tener ninguna carpeta imagenes (ya que tu archivo php está dentro de la carpeta misma) te hace un crash, por lo tanto, por ese lado, saca el archivo .php de la carpeta imagenes o crea otra carpeta imagenes donde tengas el .php
Otra cosa es lo del nombre, ahí puede existir algún tipo de error o te cause algún tipo de conflicto con alguna otra variable, así que necesitaría el logcat para saber exactamente porque te falla ahí, pero yo creo que el error que te produce es por lo comentado antes de tu archivo php.
Suerte, comenta si tienes algún otro fallo o se te solucionó el problema.
Un saludo
Este comentario ha sido eliminado por un administrador del blog.
ResponderEliminarYa lo tengo, cuando lo vea con detenimiento, te digo algo.
EliminarUn saludo
Te lo agradecere, en serio me esta volviendo loco
EliminarHola, resulta que selecciono imagenes desde mi galeria o bien las saco desde la cámara, luego obtengo la URI seleccionada. Estas uri las paso a bitmap y las dejo en un ListView para que el usuario pueda ingresar varias imagenes. El caso es que cuando intento pasar mi tercera imagen seleccionada me lanza un error en mi aplicacion al tratar de convertir mi uri en bitmap, las 2 primeras imagenes que subo no tienen ningun problema.
ResponderEliminarAca el código de uri a bitmap
Bitmap nuevobitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
selectedImage es mi uri (este uri viene con datos, incluso la puedo convertir en un path, pero al pasarlo a bitmap se cae).
Alguna idea? Muchas gracias.
Bartolome mira revise la carpeta de imágenes le quite la opción de solo lectura y aun así no sube la imagen, estoy usando wampserver tengo una carpeta imagenes dentro de wamp/www/hotel/imagenes esta bien? ayudame por favor, se que la aplicación esta bien porque la información que debe estar en la base de datos esta pero la imagen nada
ResponderEliminarBuenas;
EliminarAparte de revisar la carpeta imagenes, revisa las otras también (wamp, www/ y hotel), solo conque alguna lleve la de "solo lectura" te fastidia todo el cotarro.
Otra cosa no te puedo comentar sin el catlog que te tira, y si no te tira ningún catlog, te puedes ir a tu carpeta de wampserver y buscar la carpeta log (ahora mismo no me acuerdo de su ruta), en esa carpeta log están los log que te lanza el wampserver, compruébalos para ver que errores te está tirando.
Siento no poder ayudarte más, pero sin ver los log's lo único que te puedo comentar es que revises bien las carpetas por si tuviesen "solo lectura" o comprobar la url de tu programa, pero eso ya lo habrás comprobado millones de veces, así que sin algo más de info por parte de los logs, no te puedo ayudar más, lo siento :(
Suerte.
hola muy buen tutorial me funciona casi todo puedo abrir la camara tomar la foto nombrarla pero el problema esta al subir la imagen al servidor el archivo php que se encarga de subirla si uso un formulario html si lo sube sin problemas pero si uso el formulario de android no llega al servidor.
Eliminar¿que puedo hacer?
Felicidades Bartolome, como debo modificar esto para poder enviar un archivo de audio sea mp3 o wav el cual ya lo tengo grabado en una carpeta del dispositivo y enviarlo a una tabla en mysql.
ResponderEliminarMuchas gracias por tu ayuda.
Hola amigo...
ResponderEliminarMe da error en esta fila:
ContentBody foto = new FileBody(file, "image/jpeg");
Buenas!
ResponderEliminarAntes de nada, felicitarte por tu trabajo
He realizado todo lo que has comentado, pero hay una parte que se me queda tachado, todo lo refente a http*
private void uploadFoto(String imag){
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpPost httppost = new HttpPost("http://192.168.0.11/picarcodigo/upload.php");
MultipartEntity mpEntity = new MultipartEntity();
ContentBody foto = new FileBody(file, "image/jpeg");
mpEntity.addPart("fotoUp", foto);
httppost.setEntity(mpEntity);
try {
httpclient.execute(httppost);
httpclient.getConnectionManager().shutdown();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
No se muy bien por que me esta pasando esto... pero me he quedado pillado.
Me puedes echar una mano?? o si alguien sabe como solucionar
Muchas gracias
a mi me pasa lo mismo lo pudiste solucionar?, saludos :D
Eliminara mi me pasa lo mismo lo pudiste solucionar?, saludos :D
Eliminarrequieren http components y http client ademas de http mine
EliminarPudiste solucionar ese problema?
EliminarHola amigo... que tal... me esta sirviendo de mucho tu trabajo... muchas gracias... pero al igual que muchos aqui... también no me sube la imagen a la carpeta... ya cheque los permisos y aparentemente están bien... ya cambie cosas al PHP y tampoco... alguna otra idea del porque no me fusiona? Saludos!!
ResponderEliminarBuenas Bartalome tengo una duda; al igual que ha mucho a mi no me subia la imagen al server pero lo logre solventar revisando muy bien el codigo y por ello te FELICITO gracias me sacaste de una que no tienes idea, no obstante tengo una duda como puedo hacer para hacer lo mismo solo que escogiendola desde la galeria si no te molestas te pedire que seas un poco explicito ya que apenas estoy empezando en estos ambitos
ResponderEliminarGracias de antemano,
PSD: puede responder cualquiera que sepa y que lea esto por favor es urgente...
ALguien puede ayudarme? solo necesitaro guardar un monto y la foto que se tome o seleccione.
ResponderEliminarSolo em falta el guardar los datos lo demas ya lo tengo. Estoy utilizando Androdi Studio. HELP! :(
no sube la imagen el nombre de la imagen y el formato pero jamas la imagen me pueden explicar por fa como es q sube y que tipo de dato debe aceptar la tabla por q la resivon eun un varchar ey en un blob la visualizo y solo elnombre no apaese la imagen que estare asiendo mas podias decirme ens si cuan es el proceso donde la sube porfa
ResponderEliminarHola disculpen alguien puede ayudarme:
ResponderEliminarCuando tomo la foto desde la App y darle OK en ocasiones regresa a la pantalla principal y muestra la vista previa, pero en ocasiones se detiene y me señala que esta mal la siguiente linea de código:
bit = android.provider.MediaStore.Images.Media.getBitmap(cr, output);
También me queda tachado, todo lo referente a http*
Por favor alguien podría ayudarme ya intente solucionarlo pero se sigue deteniendo (Soy nueva en este tema)...
solo modifique la ruta de la foto a:
foto = Environment.getExternalStorageDirectory() + "/"+ "Expedientes" + "/" + NombreCarClient + "/"+ "Documentos"+"/"
+nombreImagen.getText().toString().trim()+".jpg"; //--->RUTA ...
Estoy trabajando con Android Studio
Hola eso se debe al uso de bitmaps de imágenes muy pesadas.. en un momento hace crash debido a que se llena la memoria..
EliminarExelente trabajo, podrias volver a subir el proyecto completo, ya que el link parece estar caido.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarBuenos días Ingeniero, quiero agradecerle por brindarnos sus conocimientos, muy chevere sus tutoriales. Ingeniero me puede colaborar por favor, no he podido encontrar una solución y no quiero quedarme con "no pude no intento mas" el que persevera alcanza, una ayuda o una iniciativa por fa.
ResponderEliminarMe encontraba trabajando en eclipse Indigo, un día x no me continuo funcionando los emuladores, arrojando el siguiente error, y pues nada que encuentro la solución, lo que he echo es instalar de nuevo la plataforma eclipse con sus requerimientos y nada que me sirve los emuladores, intento crear emuladores nuevos y tampoco este es el error que me dice:
Starting emulator for AVD 'Android-4-3-1'
Failed to create Context 0x3005
emulator: WARNING: Could not initialize OpenglES emulation,
/////////////////////////////////
//using software renderer.
//could not get wglGetExtensionsStringARB//
//could not get wglGetExtensionsStringARB//
//could not get wglGetExtensionsStringARB//
//could not get wglGetExtensionsStringARB//
//could not get wglGetExtensionsStringARB//
//could not get wglGetExtensionsStringARB//
//could not get wglGetExtensionsStringARB//
//could not get wglGetExtensionsStringARB//
//Could not initialize emulated framebufferCannot set up //guest memory 'android_arm': Invalid argument//
////////////////////////////////////////
Al comienzo que empece con eclipse me arrojaba un error parecido e investigue y aumente la ram a 1024 y se soluciono, pero esta vez no.
Agradezco la ayuda, no encuentro como solucionar esto.
La solución que me acabo de dar, es instale Android Studio y ejecute o cree un emulador y me funciono.
EliminarEntonces intente abrirlo por eclipse y ya todo esta bien.
No supe cual era el error pero ya puedo continuar trabajando en esto.
hola oye necesito tu ayuda, de un error, esperare tu respuesta para poder mostrartelo
ResponderEliminarHola buen dia, estoy realizando algo muy similar a esto, pero el problema que tengo es que el http esta deprecated, alguna idea de cual otra pudiese usar?? algo similar ya que soy novato en android
ResponderEliminarexcelente ayuda , para subir un txt o pdf como seria?
ResponderEliminarque kambio habria k hacer?
Hola estoy usando android studio y ya agrege el httpmime pero al ejecutar la app, me sale error de que la clase no exite, me podrias ayudar por favor. gracias
ResponderEliminarSaludo. Podríamos por favor conversar vía Skype? mi usuario es agromerchant. Requiero subir fotos, adjuntar datos de esa imagen. Dar acceso a ciertos usuarios, con contraseña... etc. Gracias mil.
ResponderEliminarSaludo. Podríamos por favor conversar vía Skype? mi usuario es agromerchant. Requiero subir fotos, adjuntar datos de esa imagen. Dar acceso a ciertos usuarios, con contraseña... etc. Gracias mil.
ResponderEliminarHola saludos desde Guatemala, necesito ayuda con el codigo en que quiero enviar la imagen pero antes comprimirla para que sea mucho mas rapido el envio como podria lograrlo, algien que me pueda ayudar
ResponderEliminarMi hermano del alma, gracias, gracias y muchisimas gracias, estoy haciendo mi proyecto de grado y el ultimo modulo que me faltaba era precisamente la montada de una foto, con esto cierro con broche de oro la beta de mi aplicacion.
ResponderEliminarSaludos.
Estoy utilizando Android Studio, pero ya compila pro a la hora de subir se que queda en actualizando el servidor y de ahí no pasa.Alguien sabe?
ResponderEliminarO que me ayude?
Revisa los permisos de la carpeta donde guardas las imágenes, saludos
EliminarMuchas gracias, me fue muy útil.
ResponderEliminarSaludos hermano....
que tal como están? tengo un problema, es relacionado a servidores locales, no se si vaya aqi o donde; bueno ahí va: he creado un servidor local con mi cel Android y kws, lo que quiero hacer es cargar un exploit para la consola wiiu;pongo los archivos en la raíz del cel y los cargo en el navegador de la consola; tiene que cargarse 2 veces en el navegador; una para cargar el kernel exploit y otra para cargar el programa que corre los backups, eston se corren a través de una memoria sd, ya los tengo preparados y listos, mi pregunta es: tengo que guardar los mismos archivos en la raíz del cel y en la SD? el index.html tiene que ser el mismo o tengo que editarlo, sinceramente no soy programador pero me interesan estos temas, si alguien me pudiera ayudar estaría muy agradecido, pueden preguntar lo que sea, se que es otro tema, pero es relacionado a servidores, gracias x su tiempo, ojala a alguien le interese. Gracias.
ResponderEliminarGracias.
ResponderEliminarDe antemano excelente aporte. Tan solo tengo una duda; como quedaría el código si en lugar de PHP fuera C# ?
ResponderEliminarsucede que las imágenes están dentro del servidor del mysql y por lo tanto si necesitas con el C#, seria con el IIS(publicarías con el IIS), revisa este link
Eliminarhttp://www.sgoliver.net/blog/acceso-a-servicios-web-soap-en-android-22/
Muchas gracias por este increíble código, sinembargo tengo problemas con el sdk 23, tengo entendido que hay algunos comandos que ya son "obsoletos" para el 23, para que sdk se diseño este código? ya voy a probar con el 21 a ver que pasa.
ResponderEliminarGracias por el código esta genial me ayudo mucho, pero tengo un problema: me aparece un error cuando pongo "serverUpdate() para cargar la foto no se que pueda estar generando este error no se si alguien me pueda ayudar. Les agradecería mucho
ResponderEliminartiene que verificar si realmente esta igual al ejemplo, revisa minuciosamente
EliminarMi estimado, cuando necesito obtener una imagen de la unidad C:Imegen/todas mis imaganes y poder visualizarlo en mi App, como seria?
ResponderEliminarBuen día al momento de ejecutar me sale Sin éxito al subir la imagen
ResponderEliminarBuen día al momento de ejecutar me sale Sin éxito al subir la imagen
ResponderEliminarno puedo abrir el proyecto me indica q el archivo rar eta dañado
ResponderEliminarHola muchas gracias por tu tutoriales agradezco que hallas compartido tu conocimiento, tengo las siguientes dudas:
ResponderEliminar1. En el php en donde debo colocar la carpeta y si tengo que darle algún permiso especial???
2. Me gustaría que a la misma vez se alojará la imagen en una base de datos como debería hacer el proceso???
3. En el caso de querer obtener una imagen de la galería de fotos cual seria el código correcto.
Agradezco la colaboración que me brindes es de suma importancia para mi gracias.
muchas gracias por el material pero yo tengo un problema ala hora de oprimir el boton upload la aplicacion se detiene alguien que me pueda ayudar de ante mano gracias ..
ResponderEliminarHola Daniel revisa la resolución de la cámara si es muy pesada siempre se te detendrá
EliminarEste comentario ha sido eliminado por el autor.
EliminarHola:
ResponderEliminarmuchas gracias por tu tutoriales agradezco que hayas compartido tu conocimiento, tengo las siguientes dudas:
1. En el php en donde debo colocar la carpeta ya que la estoy manejando en la carpeta del directorio pero no me esta guardando las imágenes y si tengo que darle algún permiso especial???
2. Me gustaría que a la misma vez se alojará la imagen en una base de datos como debería hacer el proceso???
3. En el caso de querer obtener una imagen de la galería de fotos cual sería el código correcto.
4. Al darle upload me indica que la foto quedo subida pero no se en que carpeta se esta guardando y en la BD no esta guardando
Agradezco la colaboración que me brindes es de suma importancia para mi gracias.
Hola, alguna vez yo hice el cambio para que trajera las imágenes desde la galería, lo único que debes hacer es cambiar el Intent para que llame a la galería en vez de la Cámara
Eliminarcual fue la ruta correcta entonces?, que ami como a casi todos le funciona bien el codigo en android studio, la base de datos imagenes si se actualiza, me da el mensaje de exito en la conexion, pero no me sube las imagenes.
ResponderEliminarya le quite a la carpeta solo lectura, y desactive el antivirus..
porcierto, no se si puedas hacer el codigo para PDO en vez de mysql_query
Funciona bien la conexión solo que actualice los ficheros a php5 y funciona correctamente pero hay un problema solo se guarda el nombre en la tabla pero en la carpeta no se genera.
ResponderEliminarOpenGL ES Shader Compiler Version: E031.24.00.15
ResponderEliminarBuild Date: 05/13/14 Tue
Local Branch:
Remote Branch: quic/LNX.LA.3.5.1_RB1.2
Local Patches: NONE
Reconstruct Branch: NOTHING
07-05 11:47:04.844 29575-29575/com.robeasd.takepicture D/OpenGLRenderer: Enabling debug mode 0
07-05 11:47:04.984 29575-29575/com.robeasd.takepicture I/ActivityManager: Timeline: Activity_idle id: android.os.BinderProxy@4195b368 time:128725784
07-05 11:47:16.544 29575-29575/com.robeasd.takepicture W/IInputConnectionWrapper: showStatusIcon on inactive InputConnection
07-05 11:47:20.964 29575-29575/com.robeasd.takepicture D/dalvikvm: GC_FOR_ALLOC freed 456K, 30% free 3372K/4792K, paused 138ms, total 138ms
07-05 11:47:20.964 29575-29575/com.robeasd.takepicture I/dalvikvm-heap: Grow heap (frag case) to 18.227MB for 12582928-byte allocation
07-05 11:47:21.374 29575-29575/com.robeasd.takepicture D/dalvikvm: GC_FOR_ALLOC freed 34K, 9% free 15629K/17084K, paused 10ms, total 15ms
07-05 11:47:21.374 29575-29575/com.robeasd.takepicture I/dalvikvm-heap: Grow heap (frag case) to 30.197MB for 12582928-byte allocation
07-05 11:47:22.324 29575-29575/com.robeasd.takepicture I/Adreno-EGL: : EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_LNX.LA.3.5.1_RB1.04.04.02.048.052_msm8610_LNX.LA.3.5.1_RB1__release_AU ()
OpenGL ES Shader Compiler Version: E031.24.00.15
Build Date: 05/13/14 Tue
Local Branch:
Remote Branch: quic/LNX.LA.3.5.1_RB1.2
Local Patches: NONE
Reconstruct Branch: NOTHING
07-05 11:47:22.864 29575-29575/com.robeasd.takepicture I/ActivityManager: Timeline: Activity_idle id: android.os.BinderProxy@4195b368 time:128743662
Buena tarde, a mi no me muestra la imagen en el ImageView y tampoco la sube al servidor, podrías apoyarme a solucionarlo?
ResponderEliminarSolucionado el problema!
Eliminar¿Te importaría compartir como lo has solucionado? me ocurre lo mismo! Un saludo
Eliminardisculpa bartolome el principio del tutorial hablas de crear una carpeta de imagen como se hace eso o que es yo soy principiante en ello
ResponderEliminarcomo puedo hacerle para subir dos imagenes?
ResponderEliminarsabes como mandar a un servicio web asmx c#
ResponderEliminarHola amigo esto sirve para cualquier tamaño de archivo o solo para 1 MB
ResponderEliminarMe funciono Perfecto muchas gracias Testeado en android api 22
ResponderEliminaramigo me podrias pasar el codigo funcionando te lo agradeceria de antemano mi correo fallenpulla@gmail.com
Eliminarsaludos amigo muy buen tuto ayuda mucho para otras cosas eres un crack en esto amigo tengo un problema el codigo lo tengo vien resolvi poco poco los errores yo solo pero no se porque no me muestra la imagen en el imageview si no lo hace no puedo subir la foto sera por la api yo la estoy usando en una api 15 y tu usas una api 19
ResponderEliminarque tal... tengo el mismo problema que tu.. no me aparece la imagen en el ImageView... lo pudiste solucionar?
EliminarHola muy buenas, esto siguiendo tus pasos, para mi proyecto lo que necesito saber es si está bien el php, eso es para un webservice local y lo que quiero,utilizar un webservice alojado en un servidor de hostinger, y utilizo para la gestion de mis archivos el invisionfilemanager, La pregunta es ¿no tendría que poner en el php una ruta en plan de esta manera http://theturistllion.hol.es/upload?
ResponderEliminarHola, yo tenia el mismo problema que algunos ponen con respecto a que se guarda en base y no se sube el archivo, después de buscar algún error en el android studio no encontraba algo que me indique el error, yo uso XAMPP y después de mucho testear me dio por revisar el log de error del servidor, me encuentro con el siguiente error:
Eliminarmove_uploaded_file(imagenes/lady-26.jpg): failed to open stream: No such file or directory in C:\\xampp\\htdocs\\ReconocimientoFacial\\cargarImagen.php on line 3
el problema era que la carpeta imagenes como se indica en el tutorial debe estar en el mismo directorio que tenemos el archivo upload.php, hice eso y se solucionó el problema.
ademas cambie el contenido del archivo upload.php y funcionó correctamente.
$target_path = "imagenes/".basename( $_FILES['fotoUp']['name']);
if(move_uploaded_file($_FILES['fotoUp']['tmp_name'], $target_path)) {
echo "Archivo ". $target_path . "subido correctamente";
} else{
echo "Error al subir el archivo";
}
Saludos
Buenas tardes he usado el código pero no me sale imagen subida con éxito he probado el php sólito y si me sube la imagen pero cuando envió la imagen desde android a través de la url se me cae la app he revisado el código linea por linea de lo descargado y lo de la web hay cosas cambiadas las modifique a como tiene en su web y nada que problemas podrían ser me hacen falta mas librerías aparte del httpmine o no funciona en un dispositivo con android 9 un xiaomi m1 o es el problema en el asyntask gracias espero me ayuden o si alguien me puede facilitar e proyecto funcionando correctamente muy amablemente
ResponderEliminar