Subir imagen de la aplicación PhoneGap Cordova
Tratando de obtener la foto para cargar, pero no puede obtener los datos del archivo en el servidor. La aplicación muestra la cámara y realiza un POST en el servidor, pero nunca se ha cargado ningún archivo.
He creado la aplicación más sencilla que pude para probar esto en https://github.com/dustinb/Camera/blob/master/index.html . Cuando se produce la subida sólo hay 452 bytes enviados al servidor.
- Envío de mensajes (notificación) a un grupo - Android
- Diferencia entre los conceptos
- Problema problemático para la integración de FaceBook
- Detectar si la aplicación de Android se ha instalado en el dispositivo mediante una página web móvil: PHP y JS
- ¿Cómo enviar notificaciones a Android desde php?
73.3.252.133 - - [04/Dec/2014:23:55:11 +0000] "POST /upload HTTP/1.1" 200 452 "-" "Dalvik/1.4.0 (Linux; U; Android 2.3.4; ADR6400L Build/GRJ22)"
He mirado un numeroso ejemplo de esto y no puedo ver nada diferente de lo que tengo. Estoy usando build.phonegap.com para construir e instalar
Edit: Usando tcpdump Puedo ver que los datos están llegando al servidor nada en $ _POST o $ _FILES variables en PHP
0x0030: 150c 34c5 504f 5354 202f 7570 6c6f 6164 ..4.POST./upload 0x0040: 2048 5454 502f 312e 310d 0a43 6f6e 7465 .HTTP/1.1..Conte 0x0050: 6e74 2d54 7970 653a 206d 756c 7469 7061 nt-Type:.multipa 0x0060: 7274 2f66 6f72 6d2d 6461 7461 3b20 626f rt/form-data;.bo 0x0070: 756e 6461 7279 3d2b 2b2b 2b2b 0d0a 5573 undary=+++++..Us 0x0080: 6572 2d41 6765 6e74 3a20 4461 6c76 696b er-Agent:.Dalvik 0x0090: 2f31 2e34 2e30 2028 4c69 6e75 783b 2055 /1.4.0.(Linux;.U 0x00a0: 3b20 416e 6472 6f69 6420 322e 332e 343b ;.Android.2.3.4; 0x00b0: 2041 4452 3634 3030 4c20 4275 696c 642f .ADR6400L.Build/ 0x00c0: 4752 4a32 3229 0d0a 486f 7374 3a20 7371 GRJ22)..Host:.sq 0x00d0: 7561 7265 732e 726f 756e 6470 6f72 6368 uares.roundporch 0x00e0: 2e63 6f6d 0d0a 436f 6e6e 6563 7469 6f6e .com..Connection 0x00f0: 3a20 4b65 6570 2d41 6c69 7665 0d0a 4163 :.Keep-Alive..Ac 0x0100: 6365 7074 2d45 6e63 6f64 696e 673a 2067 cept-Encoding:.g 0x0110: 7a69 700d 0a43 6f6e 7465 6e74 2d4c 656e zip..Content-Len 0x0120: 6774 683a 2032 3933 3530 0d0a 0d0a gth:.29350.... -- next packet -- 0x0000: 4500 05dc 617d 4000 3206 a8e9 4903 fc85 E...a}@.2...I... 0x0010: 68cf 8a5d d68c 0050 aa2b ce30 13d2 95d7 h..]...P.+.0.... 0x0020: 8010 02da 80ec 0000 0101 080a 01be ac57 ...............W 0x0030: 150c 34c5 ffd8 ffe1 0116 4578 6966 0000 ..4.......Exif.. 0x0040: 4949 2a00 0800 0000 0e00 3201 0200 1400 II*.......2.....
Parece que el problema es el límite mime con Content-Disposition y otros encabezados no se está enviando. Se puede ver en el volcado después de Content-Length se envía los datos JPEG se envía inmediatamente siguiente sin límite de mime utilizado.
- Android: mensajes de alta prioridad con la mensajería en la nube de google (con corona sdk)
- Ejecutar Gps como servicio de fondo y enviar coordenadas al servidor web (PHP)
- No se puede conectar a través de WiFi, pero es posible a través de Mobile Data
- Error: org.apache.http.conn.HttpHostConnectException: Se ha rechazado la conexión a http://10.0.2.2:8080
- ¿Ayuda a analizar resources.arsc?
- Pasa la variable de cadena de java a php
- ¿Es posible obtener el número de descargas de una aplicación de Google Play?
- Android Chat Para sesión privada para usuarios (Development Workflow)
Trate de codificar url antes de enviar.
ft.upload(imageURI, encodeURI(serverURL + "/upload.php"), function (e) { alert('success'); },function (e) { alert("failed"); },options);
Eche un vistazo a mi muestra aquí, espero que ayude.
html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta content="telephone=no" name="format-detection"> <!– WARNING: for iOS 7, remove the width=device-width and height=device-height attributes. See https://issues.apache.org/jira/browse/CB-4323 –> <meta content= "user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" name="viewport"> <script src="cordova.js" type="text/javascript"></script> <script src="js/index.js" type="text/javascript"></script> <title>Camera Cordova Plugin</title> </head> <body> <button onclick="capturePhoto();">Capture Photo</button><br> <button onclick="getPhoto(pictureSource.PHOTOLIBRARY);">From Photo Library</button><br> <img id="image" src="" style="display:none;width:100%;"> <button onclick="upload();">Upload</button> </body> </html>
js
function upload() { var img = document.getElementById('image'); var imageURI = img.src; var options = new FileUploadOptions(); options.fileKey = "file"; options.fileName = imageURI.substr(imageURI.lastIndexOf('/') + 1); options.mimeType = "image/jpeg"; var params = new Object(); options.params = params; options.chunkedMode = false; var ft = new FileTransfer(); ft.upload(imageURI, "https://www.example.com/upload.php", win, fail, options); } function win(r) { console.log("Code = " + r.responseCode); console.log("Response = " + r.response); console.log("Sent = " + r.bytesSent); } function fail(error) { alert("An error has occurred: Code = " + error.code); console.log("upload error source " + error.source); console.log("upload error target " + error.target); }
php
<?php move_uploaded_file($_FILES["file"]["tmp_name"], '/path/to/file');
Prueba a configurar el límite añadiendo encabezados a FileUploadOptions
var headers={'Content-Type':'multipart/form-data; boundary=+++++'}; options.headers = headers;
El problema fue usar el complemento de transferencia de archivos incorrecto. No estoy seguro de dónde encontré el otro complemento o por qué se utilizó pero no funciona
- <gap:plugin name="com.chanthu.evri.gcs-file-transfer" version="1.0.0" /> + <gap:plugin name="org.apache.cordova.file-trasfer" />
- Qt cómo conectar a un archivo SQLlite existente en el sistema operativo Android?
- ¿Cómo mostrar la casilla de verificación a la izquierda cuando cambie el idioma de la aplicación de Android al árabe?