HTML 4 を使用していると仮定しましょう。
GWT クライアントはファイルを「読み取る」ことができません。GWT クライアントは、ブラウザ上で実行される JavaScript です。ブラウザのセキュリティでは、ローカル ファイルを読み取ることはできません。サーバー上のファイルをプロキシ読み取りするサーブレットを取得する必要があります。
ファイルの MIME タイプを設定するのは、ブラウザでファイルをダウンロードし、ローカル PC を起動して適切なソフトウェアを起動するためです。たとえば、pdf リーダーを起動するには pdf を、Excel を起動するには xls を起動します。GWT Java または Javascript とは何の関係もありません (ダウンロードを有効にすることを除いて)。
バイナリ ファイルを読み取るために GWT クライアントが必要なのはなぜですか? もしそうなら、あなたのアーキテクチャはおそらく間違っています。「間違っている」は不親切な言葉です。おそらく、ミスアラインメントはより良い言葉です。AJAX シン クライアント サーバーの概念がずれています。GWT のドアに入ったら、デスクトップ処理の概念と習慣をドアに落としてください。
GWT は Java ですが、Java ではありません
私は、GWT Java は Javascript のより一貫した表現にすぎないことを人々に思い出させなければなりません。GWT Java でコーディングするときは、実際には Java ではなく Javascript でコーディングしていることを常に覚えておいてください。すべての Java ソースは Javascript に変換されます
したがって、GWT コンパイラーは、すべての Java クラスをソース・コードで提供する必要があります。GWT コンパイラには、Java バイトコードの jar/class ファイルを Javascript に変換する機能がありません。ライブラリがバイトコードの場合、またはソース ライブラリが呼び出しチェーンのどこかでバイトコード ライブラリを呼び出す場合、コンパイルは失敗します。
サーバー側とクライアント側の GWT の混乱
GWT RPC は、GWT 初心者にとって混乱の元になることがあります。彼らは、リモート サーブレットがサーバー上で実行されているため、バイトコードにコンパイルされる唯一の部分であることを認識していないようです。特に、Vaadin を使用している場合は、サーバーとブラウザーの間の境界線が意図的にぼやけているためです。そのため、GWT の初心者は、「なぜ私のバイトコード ライブラリはアプリの特定の部分でしか機能しないのか?」と疑問に思います。
ajax クライアント サーバー アーキテクチャ
GWT は単なる Web 対応 UI です。サーバー上でやりたいことを何でも実行できず、サーバーが実行していること、または実行したことを UI に反映させることができないのはなぜですか? なぜブラウザで行う必要があるのですか?
GWT インターフェースが強化された JSP であると想像してみてください。JSP を作成しているとします。JSP にバイナリ データをブラウザに吸い込ませ、JSP に Javascript を生成させてそこでバイナリ データを分析させますか?
私は複雑な統計分析を書いてきましたが、サーバー上で行われていることを反映するためにブラウザーを使用しただけです。エンジニアは、自分の PC で解析を実行していると考えています。チャート/レポートが生成されます。しかし、SAS を呼び出すことによって、すべてサーバー上で行われます。
サービス指向のパターン/アーキテクチャ
サーバーがサービスを提供します。ブラウザ GWT クライアントは、これらのサービスを要求します。ファイルを開き、ファイルを読み取り、ファイルを分析し、分析のビジュアル/MIME 表現を生成してブラウザに渡します。GWT ブラウザー クライアントは、サーバー ベースの操作用のディスプレイ モニターと考えてください。GWT は、エンジニアがローカル PC で分析を行っているように錯覚させる魔法のようなトリックです。もちろん、エンジニアである彼らのほとんどは、ブラウザーが実際に作業を行っていないことを知っています。
ユーザーが分析に満足したら、結果の MIME 表現を生成するサービスを取得します。これにより、MIME によってマップされた適切なローカル PC ソフトウェアを呼び出すためにブラウザーによってダウンロードされます。
サーバー上で行い、ブラウザに反映します。
さらに編集:バイナリデータについて...
Web アプリで使用される base64 エンコーディングの背後にある動機: 認証トークン、画像、音声ファイルの送信 - それらのバイナリ表現とシーケンスがエンディアンなどのアーキテクチャ上のニュアンスによって台無しにされないようにします。
たとえば、未加工のバイナリ スプレッドシートを読み取るブラウザ アプリを作成しようとしないでください。ブラウザ アプリに送信する前に、バイナリ要素を base64 でエンコードする必要がある XML または JSON (できれば JSON) にサーバーに変換させます。または、あなたの人生の目的がエベレストに登ることである場合は、base64 の代わりにアーキテクチャにとらわれないエンコーディングを発明して、バイナリ データを送信します。
ブラウザの OS 処理 (音声、画像、PDF など) の場合は、バイナリ情報のみを使用してください。JavaScript ルーチンだけで処理するバイナリ データを送信しても意味がありません。JavaScriptルーチンは、それを翻訳するために余分な処理時間を使用する必要があります(繰り返しますが、あなたの人生の目的が登ることである場合を除きます... )。