5

インメモリファイルのロケーションパスを導出することは可能ですか?

これを行う理由は、WinFormsアプリケーションによってBase64でエンコードされた文字列形式で取得される画像のコレクションがあることに基づいています。アプリケーションのWebBrowserコントロールの埋め込みページにレンダリングできるように、HTMLを作成し、これらの画像を挿入する必要があります。ここではHTMLについて話しているので<IMG>、画像を表示するためにタグを使用する必要があります。この要素は「src」パスを受け入れる必要があります。これは、各メモリ内イメージへの絶対パス/相対パスを導出する方法を決定する必要があることを意味します。

4

3 に答える 3

2

サーバー上で実行されているアプリケーションを制御する場合 (コメントで示したもの)、特定のリソースへの要求をリダイレクトできるはずです。たとえば、ユーザー アプリケーションが「http://myserver/memory/imgxxx.jpg」を要求した場合、サーバーはそれを傍受し、ディスクから imgxxx.jpg を提供しようとするのではなく、記憶し、クライアントに出荷します。

ここで、base64 でエンコードされたデータをクライアントに送信するだけで、クライアントに何らかの方法でデータにアクセスして変換を行わせたい場合...これは難しい問題です。JavaScript を使用して、特定の属性を持つすべての img タグを対応する画像に置き換えることを想像できます。しかし、それはかなり面倒なことになると思います。それさえ可能なら。

もう 1 つの可能性は、派生WebBrowserコンポーネントを作成し、その動作をカスタマイズすることです。良い例は、CreateSinkメソッドのドキュメントにあります。コンポーネントが何かをダウンロードしたいときはいつでも呼び出されるハンドラを書くことができるかもしれません。その後、呼び出しをインターセプトして、メモリ内イメージを提供できます。これが可能かどうかはわかりません。WebBrowser のカスタマイズを参照してください。ただし、ファイルを書き込んで「file://」URLを使用する方がおそらく簡単だと思います。

于 2013-01-15T14:28:07.490 に答える
1

を使用して、軽量の HTTP サーバーをアプリケーションに組み込むことができますHttpListener class

非同期モデルを使用する必要があります。「http://*:8080/appdata」などのコンテンツを提供する URL を作成し、その URL を html (http://localhost:8080/appdata/someinmemoryresource) 内で使用します。

theHttpListener がリクエストを受け取ったら、パスを見て、提供したいメモリ内のデータで応答します。

于 2013-01-15T14:09:51.147 に答える
0

タグにはIMGパスは必要ありません。URL が必要です。URL でメモリ内データを参照することはできません。ブラウザーは、タグで指定された URL を使用して 2 番目の HTTP 要求を発行しますIMG。その URL はこの時点で有効である必要があります。

画像バイトを返すために、MVC アクションまたは HTTP ハンドラーを追加することを検討してください。またはディスクに保存します。

于 2013-01-15T13:41:06.957 に答える