[解決済み] 入力フォームからBase64エンコードされたファイルデータを取得する
質問
私は基本的なHTMLフォームを持っていて、そこからFirebugで調べているちょっとした情報を得ることができます。
私の唯一の問題は、私が base64 は、ファイルデータをエンコードしてからサーバーに送信し、データベースに保存するために必要な形式を指定します。
<input type="file" id="fileupload" />
そして、Javascript+jQueryで。
var file = $('#fileupload').attr("files")[0];
利用可能なjavascriptを元に、いくつかの操作を行っています。 .getAsBinary()、 .getAsText()、 .getAsTextURL
しかし、これらのどれも、挿入できる使用可能なテキストを返さないので、これらの中には 使用できない '文字' が含まれているため - アップロードしたファイルで「ポストバック」が発生するのは避けたいし、特定のオブジェクトをターゲットとする複数のフォームを持つ必要があるので、ファイルを取得してこの方法で Javascript を使用することが重要です。
広く利用されている Javascript の base64 エンコーダーの 1 つを使用できるようにするには、どのようにファイルを取得すればよいでしょうか!
ありがとうございます。
更新 - ここで懸賞金を開始、クロスブラウザのサポートが必要です!!!
私がいる場所はここです。
<input type="file" id="fileuploadform" />
<script type="text/javascript">
var uploadformid = 'fileuploadform';
var uploadform = document.getElementById(uploadformid);
/* method to fetch and encode specific file here based on different browsers */
</script>
クロスブラウザ対応に関するいくつかの問題。
var file = $j(fileUpload.toString()).attr('files')[0];
fileBody = file.getAsDataURL(); // only would works in Firefox
また、IEは対応していません。
var file = $j(fileUpload.toString()).attr('files')[0];
と置き換える必要があるんですね。
var element = 'id';
var element = document.getElementById(id);
IEサポートのため。
これは、Firefox、Chrome、および、Safariで動作します(ただし、ファイルを正しくエンコードしませんし、少なくとも投稿後にファイルが正しく表示されません)。
var file = $j(fileUpload.toString()).attr('files')[0];
var encoded = Btoa(file);
また
file.readAsArrayBuffer()
HTML5のみ対応らしい?
多くの人が提案した。 http://www.webtoolkit.info/javascript-base64.html
しかし、これはUTF_8メソッドでエラーを返すだけで、base64エンコードする前?(または空文字列)
var encoded = Base64.encode(file);
どのように解決するのですか?
ブラウザ側のjavascriptで完全に可能です。
簡単な方法です。
その
readAsDataURL()
メソッドはすでにあなたのためにそれをbase64としてエンコードしているかもしれません。おそらく、最初のもの (最初の
,
まで)を取り除く必要があるかもしれませんが、それは大したことではありません。しかし、これはすべての楽しみを奪うことになります。
難しい方法です。
もし、難しい方法を試したい(あるいはうまくいかない)なら、次のものを見てください。
readAsArrayBuffer()
. これでUint8Arrayが手に入り、指定されたメソッドを使うことができます。これはおそらく、アップロードする前に画像データを操作したり、その他のブードゥーマジックを行うなど、データそのものをいじりたい場合にのみ有用でしょう。
2つのメソッドがあります。
-
文字列に変換して、組み込みの
btoa
または同様の- すべてのケースをテストしたわけではありませんが、私の場合、文字コードを取得するだけでうまくいきます。
- Uint8Arrayからbase64に直接変換する。
最近実装した tar をブラウザに実装しました。 . その過程で、Uint8Array->base64の直接実装を自作しました。それは必要ないと思いますが、それは を参照してください。 で見ることができます。
今、私がしていること。
Uint8Arrayから文字列に変換するコードはとてもシンプルです(bufはUint8Arrayです)。
function uint8ToString(buf) {
var i, length, out = '';
for (i = 0, length = buf.length; i < length; i += 1) {
out += String.fromCharCode(buf[i]);
}
return out;
}
そこからは、ただやるだけ。
var base64 = btoa(uint8ToString(yourUint8Array));
これでBase64エンコードされた文字列となり、問題なくアップロードできるはずです。プッシュする前にダブルチェックしたい場合は、これを試してみてください。
window.open("data:application/octet-stream;base64," + base64);
これでファイルとしてダウンロードされます。
その他の情報です。
Uint8Arrayとしてデータを取得するには、MDNドキュメントを参照してください。
関連
-
[解決済み] Webフォームのフィールド/入力タグでブラウザのオートコンプリートを無効にするにはどうすればよいですか?
-
[解決済み] jQueryを使ってドロップダウンリスト(セレクトボックス)から選択されたテキストを取得する
-
[解決済み] jQueryでフォームデータをJavaScriptオブジェクトに変換する
-
[解決済み] jQuery ドロップダウンから選択されたオプションを取得する
-
[解決済み] base64文字列をエンコード、デコードするにはどうしたらいいですか?
-
[解決済み] バイナリデータをJSON文字列で。Base64より優れたもの
-
[解決済み】enctype='multipart/form-data'とはどういう意味ですか?
-
[解決済み】「GET」パラメータから値を取得する(JavaScript)【重複】。
-
[解決済み】JavaScriptで文字列をBase64にエンコードするにはどうすればいいですか?
-
[解決済み】JavaScriptでBase64文字列からBLOBを作成する場合
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?