Sto lavorando a una pagina Web per caricare foto da un dispositivo mobile, utilizzando il tag <input type="file" accept="image/*"/>
. Funziona magnificamente su iphone e su chrome su Android, ma dove stiamo andando a finire con i problemi è con il browser Android di serie.Problema con il grezzo Foto di prelievo dal browser Galleria
Il problema sorge quando si seleziona un file dalla galleria (funziona perfettamente quando si utilizza la fotocamera per scattare una foto). E lo abbiamo ulteriormente ristretto per vedere che il tipo MIME dei dati non è disponibile quando viene prelevato dalla galleria sul browser di riserva (le foto sottostanti mostrano i primi 100 caratteri dell'URL di dati che viene caricato. L'obiettivo era quello di forzare JPEG ma senza il tipo MIME non possiamo sapere con certezza come risolvere questo problema.Vedi il codice sotto per come vengono eseguite le immagini
Come può essere resa un'immagine senza il tipo? Meglio ancora, qualcuno sa perché il tipo non è disponibile sul browser stock Android?
EDIT
in primo luogo, questi non sono la stessa immagine, sono state scattate nei pressi del Allo stesso tempo, e questo non è il problema, è per questo che i dati sono diversi (il tipo MIME non appare su nessuna immagine sul browser azionario, quindi non è questo il problema.
Aggiornamento
mi ha confermato che il tipo MIME è il problema con l'inserimento di image/jpeg nel browser magazzino dove si trova su Chrome. Sfortunatamente, non abbiamo modo di garantire che sta andando ad essere jpeg, quindi abbiamo ancora una volta davvero non posso farlo in questo modo
_readInputFile: function (file, index) {
var w = this, o = this.options;
try {
var fileReader = new FileReader();
fileReader.onerror = function (event) {
alert(w._translate("There was a problem opening the selected file. For mobile devices, some files created by third-party applications (those that did not ship with the device) may not be standard and cannot be used."))
$('#loadingDots').remove();
return false;
}
fileReader.onload = function (event) {
var data = event.target.result;
//alert(data.substring(0,100));
//var mimeType = data.split(":")[1].split(";")[0];
alert("Load Image"); //I get to this point
$('#' + w.disp.idPrefix + 'hiddenImages').append($('<img />', {
src: data,
id: "dummyImg" + index,
load: function(){
var width = dummy.width();
var height = dummy.height();
$('#dummyImg' + index).remove();
alert("Render"); // I don't get here
var resized = w._resizeAndRenderImage(data, null, null, biOSBugFixRequired, skewRatio, width, height);
alert("Image Rendered"); // I don't get here
}
}));
}
fileReader.readAsDataURL(file);
}
catch (e) {
}
}
Chrome
browser stock
non ti manca una virgola tra le proprietà 'id' e' load' dell'oggetto passato alla funzione 'append'? Inoltre, manca un punto e virgola dopo che 'alert (" Render ")'. – lxgreen
In realtà c'è una virgola presente, l'ho appena rimossa per errore durante la pulizia del mio codice per SO. L'avviso ("Render") in effetti manca un punto e virgola, ma era lì solo per i miei scopi di debug, e dopo aver risolto che avevo ancora i problemi –
ok .. in ogni caso, prova questo jsfiddle: http: // jsfiddle .net/MGB3y/11 /. questo è un esempio semplificato basato sul tuo codice. funziona sul mio HTC nel browser di serie (Android 4.0.3). questo aiuta? – lxgreen