質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

2990閲覧

javaScriptでファイルをバイナリで取得方法

MK0011

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/11/08 04:38

解決したいこと

javaScriptで画面からアップロードしたファイルをバイナリで取得方法
※大容量ファイルのアップロードなので、FileReaderのreadAsArrayBufferを利用したい

例)
OutSystemsのリアクティブでファイルアップロード処理を作ってます。
javaScriptで画面からアップロードしたファイルをバイナリで取得方法について、FileReaderのreadAsdataURLを利用してファイルのバイナリデータを取得できたが(以下のソースをご参照)、しかし大容量ファイルをアップロード時readAsdataURLだとメモリパンクするので
readAsArrayBufferで1MBずつバイナリデータを取得方法を教えてください

発生している問題・エラー

readAsArrayBufferでのバイナリデータ取得

readAsDataURL該当するソースコード

JavaScript

1funcion readAndSend(file){ 2 var reader = new FileReader(); 3 reader.addEventListener('load',function){ 4 //readAsDataURL 5 var startOfBinary =this.result.indexOf(";base64,")+8; 6 var lengthBinary=this.result.length - startOfBinary ; 7 var fileBinary = this.result.substr(startOfBinary,lengthBinary); 8 9 //↑ここでfileBinaryファイルのバイナリデータを取得できた 10 }.false); 11 reader.readAsDataURL(file); 12}

readAsArrayBuffer該当するソースコード

JavaScript

1funcion readAndSend(file){ 2 var reader = new FileReader(); 3 var chunkSize = 1024*1024; //1MB毎読み取り用 4 reader.addEventListener('load',function){ 5 //readAsArrayBuffer 6 7 var fileBinary = new Unit8Array(reader.result); 8 9 //↑ここでfileBinaryファイルのバイナリデータを取得できない 10 11 }.false); 12 reader.readAsArrayBuffer(file); 13}

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2021/11/08 05:17

『readAsdataURLを利用してファイルのバイナリデータを取得できた』とのことですが、これはBase64形式にエンコードされた文字列だと思いますので、一般的な「バイナリデータ」ではないと思います。 ここで言う「バイナリデータ」とは、Base64形式にエンコードされた文字列のことを指すと考えていいですか?
MK0011

2021/11/08 05:31

ご質問ありがとうございます。 一応OutSystemsでデバックして、以下から取得した値を見るとBinaryDataになってますが、 一般的な「バイナリデータ」になるか、すみませんそこ私の勘違いかもしれません。 var fileBinary = this.result.substr(startOfBinary,lengthBinary); readAsArrayBufferも同じようなデータ(大容量ファイルを一気に読み込みになるとメモリパンクするので、1MBずつ)を取得できればいいと思いますが、実現は可能でしょうか
Lhankor_Mhy

2021/11/08 05:37

つまり、そのOutSystemsというフレームワークを介するとバイナリ文字列になるということだと理解しました。 そのフレームワークについてまったく知識がないので、お役に立てなさそうです。
MK0011

2021/11/08 05:45

ご回答ありがとうございます。 フレームワークを一旦気にしないで頂いて、Base64形式にエンコードされた文字列に変換は可能でしょうか?
guest

回答1

0

FileReaderではできません。

file.stream().getReader() で得られる ReadableStreamDefaultReaderread() メソッドでストリーミング処理することができます。1MB単位で、という指定はできません。

投稿2021/11/08 05:21

int32_t

総合スコア21695

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MK0011

2021/11/08 05:35

ブラウザから1GBほどのファイルをアップロードしたいですか、file.stream().getReader()ではメモリパンクしないでしょうか?
int32_t

2021/11/08 05:39

私は1GBを試したことないので、ぜひ試して結果を教えてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問