19

Heroku (cedar env) に Rails アプリがあります。メソッドを使用してキャンバス データを画像にレンダリングするページがありますtoDataURL()。返された base64 画像データ文字列を、JavaScript を使用して (サーバー側をバイパスして) s3 に直接アップロードしようとしています。問題は、これはファイルではないため、base64 でエンコードされたデータを S3 に直接アップロードしてファイルとして保存するにはどうすればよいかということです。

4

4 に答える 4

29

これを行う方法を見つけました。さまざまなチュートリアルを見て、多くの検索を行った後。

Data URI を blob に変換し、CORS を使用してそのファイルを S3 にアップロードする必要があります。複数のファイルを操作している場合は、それぞれに個別の XHR リクエストがあります。

データ URI を blob に変換し、CORS ( Convert Data URI to Blob )を使用して直接 S3 にアップロードできるこの関数を見つけました。

function dataURItoBlob(dataURI) {
    var binary = atob(dataURI.split(',')[1]);
    var array = [];
    for(var i = 0; i < binary.length; i++) {
        array.push(binary.charCodeAt(i));
    }
    return new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
}

これは、S3 に直接アップロードするための優れたチュートリアルです。ファイルではなく BLOB を許可するようにコードをカスタマイズする必要があります。

于 2013-01-07T14:18:50.450 に答える
3

誰かが気になる場合: 上記の関数の coffescript バージョンを次に示します。

  convertToBlob = (base64) ->
    binary = atob base64.split(',')[1]
    array = []
    for i in [0...binary.length]
      array.push binary.charCodeAt i
    new Blob [new Uint8Array array], {type: 'image/jpeg'}
于 2014-07-03T09:52:21.093 に答える
1

OPがすでにこれを解決しているかどうかはわかりませんが、非常によく似た機能に取り組んでいます。少し調べてみたところ、参考になりそうな記事を見つけました。

于 2012-10-24T07:39:49.473 に答える