2013-07-17 15 views
5

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
Chrome

browser stock
Stock Browser

+1

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

+0

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 –

+0

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

risposta

4

Dal momento che il problema è probabilmente legato al browser e non è possibile correggere il browser (si potrebbe comunque segnalare un errore a Google), suggerirei di intraprendere un percorso diverso.

Date un'occhiata qui: In Node.js, given a URL, how do I check whether its a jpg/png/gif?

Vedi le osservazioni della risposta accettata, il che suggerisce un metodo per verificare il tipo di file utilizzando il flusso di file. Sono abbastanza sicuro che funzionerebbe su Javascript implementato dal browser e non solo su Node.js.

+0

Grazie, sembra essere così ...In questo momento sono in vacanza quindi non posso testarlo sfortunatamente –

Problemi correlati