20614
お世話になります。  
monacaを使って、HTML5+Javascriptベースのevernoteアプリを開発しています。  
しかし、画像をevernoteに投稿するための昨日の実装ができず、詰まっている状況です。  
ウェブでまる１日情報を探しましたが、恥ずかしながらいまだ解決できていません。

背景は下記になります。

【１．使用する画像データ】  
monacaのカメラプラグインの使用で、スマートフォンのカメラで撮影した画像ファイルをbase64形式 または ファイル URI
形式（例：file://xxxxx.jpg）で取得できます。

【２．Evernoteの仕様】  
evernoteの仕様で、画像をアップロードするには、resourceを指定する必要があります。  
更にresorce.data.bodyとしてバイナリデータを、resorce.data.bodyHashとしてMD5ハッシュ（１６進）を指定する必要があります。

【３．現状（問題）】  
・ハッシュが生成されない  
・そもそも、変数へのバイナリファイルの入れ方に自信がない。

【４．試したこと】  
１．<http://hakuhin.jp/js/base64.html> の「「Base64
文字列」から「ArrayBuffer」にデコード」にあるBase64_To_ArrayBuffer関数  
及び  
<http://www.onicos.com/staff/iz/amuse/javascript/expert/> にある「md5.js」  
を使用。（世に出す前には適切な権利関係の処理をいけませんが、ひとまず動作するかを見ています。）

２．実施したスクリプト（抜粋）

```

    //変数定義
    var photo_base64 ="";//ここには、外部の別の関数からbase64形式のデータが入力されます。
    var binary_camera = new ArrayBuffer(10485760); //バイナリデータを入れる変数（のつもりですが、自信がありません。）
    var hash = "";//撮った写真のハッシュ。evernoteにアップする際に必要。
    
    var little_endian = false;// ビッグエンディアン方式を使用する。バイナリの中身をdata_viewを使って見る際の処理用の変数。
    var pos = 0;    // バッファの位置。バイナリの中身をdata_viewを使って見る際の処理用の変数。
    
    
    //処理
    binary_camera = Base64_To_ArrayBuffer(photo_base64);//base64をバイナリに変換している（つもり）
    hash = MD5_hexhash(binary_camera);//MD5ハッシュを作っている（つもり）
    var data_view = new DataView(binary_camera);//バイナリファイルの中を除くためのDataviewを作成
    
    // 4 Byte ずつ読み込み（バイナリファイルの中身が埋まっているか確認）
    console.log( data_view.getUint32(pos,little_endian) ); 
    pos += 4;
    console.log( data_view.getUint32(pos,little_endian) ); 
    pos += 4;
    
```

３．結果  
hashの出力結果が"0123456789abcdeffedcba9876543210"となり、MD5_hexhash()にうまく情報が渡せていないようです。  
しかし、data_viewで確認すると、何らかのデータがきちんと埋まっているようです。

４．やりたいこと  
変数へのバイナリデータの格納、ハッシュ文字列の生成。  
今回はbase64形式でトライしましたが、ファイル URI 形式（例：file://xxxxx.jpg）でも構わないと考えています。  
ただ、後者の場合、fileapiのfilereaderを使うことになるかと思いますが、これを使う場合は権限関係でユーザーがウェブ上でクリックしないといけないと聞いたことがあり、混乱しています。

雑駁ですが、解決策等、お気づきの点があれば、ご教示いただけないでしょうか。  
ご多忙のところ、申し訳ございません。
CC BY-SA 3.0
2016-01-04T19:16:43.757
20611
2016-02-04T02:12:29.733
2016-01-04T22:55:15.683
2391
13831
question
javascript monaca html5
Javascriptでのバイナリファイルの取り扱い方（バイナリファイルのmd5ハッシュ（１６進）を作りたい）
そのMD5_hexhashは文字列がわたってくることを想定されているので"[object
ArrayBuffer]"のhashを求めてます。他のMD5の実装を使うのがいいでしょう。

<https://github.com/emn178/js-md5/blob/master/src/md5.js>
CC BY-SA 3.0
2016-01-05T01:46:33.370
20614
2016-01-05T01:46:33.370
241
20611
answer