2013-07-17 8 views
5

<input type="file" accept="image/*"/>タグを使用してモバイルデバイスから写真をアップロードするためのWebページを作成しています。これはiPhoneとChromeのアンドロイド上で美しく機能しますが、私たちが問題に取り組んでいるところは、アンドロイドのブラウザにあります。在庫ありブラウザギャラリーから写真を選ぶ

ギャラリーからファイルを選択すると、問題が発生します(カメラを使用して写真を撮ると問題なく動作します)。また、ストックブラウザのギャラリーから取得したデータMIMEタイプが利用できないことを確認するために、さらに絞り込んだ(下の写真は、ロードされるデータURLの最初の100文字を示しています。しかし、MIMEタイプがなくても、これを修正する方法を知ることはできません。画像のレンダリング方法は以下のコードを参照してください。株式アンドロイドのブラウザでは利用できません?

EDITまず

、これらは同じ画像ではありません、彼らは近く撮影されましたそれは問題ではないので、データが異なっています(MIMEタイプはストックブラウザ上のどの画像にも表示されないので、問題はありません)。

更新

私は、MIMEタイプは、それがクロムである株式のブラウザに画像/ JPEGを挿入することで問題であることを確認しました。残念ながら、我々はJPEGになるだろうことを保証する方法がないので、我々は再び本当にそのように行うことができません

_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

ストックブラウザ
Stock Browser

+1

あなたは 'append'関数に渡されたオブジェクトの' id'と 'load'プロパティの間にカンマがありませんか?また、 'alert(" Render ")の後のセミコロンもありません。 – lxgreen

+0

実際にはコンマがありますので、私のコードを掃除する際に誤って削除しました。アラート(「レンダリング」)は実際にはセミコロンがありませんが、それはデバッグ目的のためだけにありましたが、私はまだ問題があったことを修正した後に –

+0

ok ..どんな場合でも、このjsfiddleを試してください:http:// jsfiddle .net/MGB3y/11 /。これはコードに基づいた簡単なサンプルです。それは私のHTC在庫ブラウザ(アンドロイド4.0.3)で動作します。これは役に立ちますか? – lxgreen

答えて

4

この問題はおそらくブラウザーに関連しているので、ブラウザを修正することはできません(ただし、Googleにバグを報告することはできます)。別の方法をとることをおすすめします。

はこちらをご覧: In Node.js, given a URL, how do I check whether its a jpg/png/gif?

は、ファイルストリームを使ってファイルの種類を確認する方法が提案されている受け入れ答え、のコメントを参照してください。私はこれがブラウザで実装されたJavascriptで動作し、Node.jsでは動作しないと確信しています

+0

ありがとうございます。私は実際に休暇中ですので、残念ながらこれをテストすることはできません –