FlutterにてHTTPサーバー機能を持ったAndroidアプリを作成しています。
端末の8080ポートにアクセスされた際にindex.htmlをレスポンスし、その後はリクエストに応じてindex.htmlに記載されているcssやjsファイルをレスポンスするものです。
index.htmlをレスポンスし、その後のcssやjsのレスポンスは成功し、Webページが表示出来ました。
しかし、favicon.icoのレスポンスが出来ず、困っています。
リクエストのあった資材はrootBundleクラスを使用して読み込んでおり、テキストファイルはloadStringメソッドで読み込めますが、画像ファイルの読み込み方法が分かっていない状況です。
assetsとして登録した画像ファイルをHTTPレスポンスする方法をご存知の方がいらっしゃいましたらご教授下さい。
レスポンスする資材は以下のような階層でアプリ内のassetsフォルダに格納してあります。
assets
|build
|-css
||-example.css
|-js
||-example.js
|-index.html
|-favicon.ico
テキストファイルの読み込みは以下のようなコードでレスポンスしています。
dart
1fileHandler(HttpRequest request) async { 2 String fileName = "assets" + request.uri.path; 3 String mimeType = mime.lookupMimeType(fileName); 4 String fileText = await rootBundle.loadString(fileName); 5 request.response 6 ..headers.set('Content-Type', mimeType); 7 ..write(fileText); 8 ..close() 9}
【2020/04/17追記】
以下の方法で自己解決しました
dart
1String mimeType = lookupMimeType(fileName); 2 if (mimeType == null) mimeType = 'text/plain; charset=UTF-8'; // default 3 print("mimeType = " + mimeType); 4 5// ファイルを読み取る 6 final bytes = await rootBundle.load(fileName); 7 final buffer = bytes.buffer; 8 9 //レスポンスを作成 10 request.response 11 ..headers.set('Content-Type', mimeType) 12 ..statusCode = HttpStatus.ok 13 ..add(buffer.asInt8List()) 14 ..close();
あなたの回答
tips
プレビュー