file:// プロトコルを使用して Google Chrome で画像を表示できないようです。
file://my-network-computer/my-folder/my-file.jpg
ファイルをリモートネットワークなどにロードして、asp.netページに画像としてレンダリングする方法があればいいと思います。
ネットワーク ドライブ上のファイルからバイトをロードし、そのコンテンツを asp.net ページのイメージとしてレンダリングすることは可能ですか?
file:// プロトコルを使用して Google Chrome で画像を表示できないようです。
file://my-network-computer/my-folder/my-file.jpg
ファイルをリモートネットワークなどにロードして、asp.netページに画像としてレンダリングする方法があればいいと思います。
ネットワーク ドライブ上のファイルからバイトをロードし、そのコンテンツを asp.net ページのイメージとしてレンダリングすることは可能ですか?
UNC パスを使用してネットワーク上のファイルを開き、次を使用してその内容を応答に書き込むハンドラーを作成できますResponse.WriteFile
。
<%@ WebHandler Language="C#" Class="Handler" %>
using System.IO;
public class NetworkImageHandler : System.Web.IHttpHandler
{
// Folder where all images are stored, process must have read access
private const string NETWORK_SHARE = @"\\computer\share\";
public void ProcessRequest(HttpContext context)
{
string fileName = context.Request.QueryString["file"];
// Check for null or empty fileName
// Check that this is only a file name, and not
// something like "../../accounting/budget.xlsx"
// Check that the file extension is valid
string path = Path.Combine(NETWORK_SHARE, fileName);
// Check if the file exists
context.Response.ContentType = "image/jpg";
context.Response.WriteFile(path, true);
}
public bool IsReusable { get { return false; } }
}
次に、画像src
をハンドラー URL に設定します。
<asp:Image runat="server" ImageUrl="~/NetworkImageHandler.ashx?file=file.jpg" />
入力のチェックについては非常に厳密にしてください。誰かがネットワーク上の任意のファイルを開くことを許可するハンドラーを作成しないでください。アクセスを 1 つのフォルダーに制限し、ワーカー プロセスにそのフォルダーへのアクセスのみを許可し、有効なファイル拡張子 (jpg、jpeg、png、gif など) を確認します。
これはかなり単純な例です。テストせずに本番環境で使用しないでください。
コンテンツを応答に書き込む別の方法と、その他のコード例については、次を参照してください。
はい、可能です。
バイトを base64 文字列に変換し、画像 src を base64 文字列に設定できます。
例:
<img src="data:image/gif;base64,R0lGODlhDwAPAKECAAAAzMzM/////
wAAACwAAAAADwAPAAACIISPeQHsrZ5ModrLlN48CXF8m2iQ3YmmKqVlRtW4ML
wWACH+H09wdGltaXplZCBieSBVbGVhZCBTbWFydFNhdmVyIQAAOw=="
alt="Base64 encoded image" width="150" height="150"/>
バイトをbase64文字列に変換する方法は次のとおりです。
base64String = System.Convert.ToBase64String(binaryData,
0,
binaryData.Length);