これは、コンソールに出BASE64を出力します。変数としてFileReader base64をキャプチャする方法は?
function getBase64(file) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
console.log(reader.result);
};
reader.onerror = function(error) {
console.log('Error: ', error);
};
}
var file = document.querySelector('#files > input[type="file"]').files[0];
getBase64(file); // prints the base64 string
出典:https://stackoverflow.com/a/36281449/1063287
jsFiddle:jsFiddle demo of the above working code
私は変数にBASE64を割り当てることができるようにしたいので、私が試しましたthis answerに基づく以下:
function getBase64(file, onLoadCallback) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = onLoadCallback;
reader.onerror = function(error) {
console.log('Error when converting PDF file to base64: ', error);
};
}
var my_pdf_file = document.querySelector("#my_pdf_file").files[0];
var my_pdf_file_as_base64 = "";
getBase64(my_pdf_file, function(e) {
my_pdf_file_as_base64 = e.target.result
});
// print out the base64 to show i have captured the value correctly
console.log(my_pdf_file_as_base64);
現在、コンソールに何も印刷していません。
質問:
私は変数としてbase64で値を保存することができますどのように?
編集:
コンテキストのために、要求されたよう:
私には、Google Appsスクリプト環境でフォームを送信しています。
私は以前これを行い、フォームオブジェクト(ファイルを含む)をGoogle Apps Script関数に渡しました。
しかし、このアプローチの制約の1つは、フォームオブジェクトをパラメータとして渡す場合、これが唯一のパラメータであるということです。ページ内
フォーム要素は、パラメータとして有効ですが、それは は、関数のパラメータのみ、このインスタンスで
でなければならない、私は、複数のパラメータを通過していますパラメータの1つがpdfファイルになり、base64に変換されます。 Aasmundの偉大な答えは@に対応して
、私はさらに、コード実行ブロックする変数割り当てたい:
var my_pdf_file = [ converted file here ];
// don't do this stuff until the above variable is assigned
をそうでなければ、私はthen
ブロックに場所を取るために、残りのコードをリファクタリングする必要があります(提案by @Aasmund)、それはフォームが提出される前に行われているバリデーション/変数準備/条件付き処理のために乱雑/不可能かもしれません。残りのコードが実行し続けながらダウンロードはバックグラウンドで行わ -
元の投稿に文脈を追加しました。ありがとうございます。 – user1063287
@ user1063287:私の更新を参照してください。 –
オンクリックハンドラは、実際のインスタンスがフォーム検証ライブラリのsuccessハンドラで実行されるように、サンプル動作を促すためにデモで表示されましたが、非同期ではないと仮定しています。 FileReader base64の同期割り当てが可能な場合、将来の誰かが投稿を見ている場合は、私たちにお知らせください!ありがとう! – user1063287