htmlファイルがローカル(私のCドライブ上)の場合は機能しますが、htmlファイルがサーバー上にありイメージファイルがローカルの場合は機能しません。何故ですか?
考えられる回避策はありますか?
htmlファイルがローカル(私のCドライブ上)の場合は機能しますが、htmlファイルがサーバー上にありイメージファイルがローカルの場合は機能しません。何故ですか?
考えられる回避策はありますか?
src=""
回答:
クライアントがローカルファイルシステムファイルを要求し、JavaScriptを使用してファイルの内容を把握できるとしたら、セキュリティの脆弱性になります。
これを回避する唯一の方法は、ブラウザで拡張機能を構築することです。Firefox拡張機能とIE拡張機能はローカルリソースにアクセスできます。Chromeははるかに制限があります。
「C:/localfile.jpg」の代わりに「file:// C:/localfile.jpg」を使用するべきではありませんか?
C:
認識されたURIスキームではありません。file://c|/...
代わりに試してください。
正直なところ、最も簡単な方法は、サーバーにファイルホスティングを追加することでした。
IISを開きます
デフォルトのWebサイトの下に仮想ディレクトリを追加する
「NETWORKSERVICE」および「IISAppPool \ DefaultAppPool」のC:ドライブ上のフォルダーに適切なアクセス許可を追加します
デフォルトのWebサイトを更新する
これで完了です。これで、http://yourServerName/whateverYourFolderNameIs/yourImage.jpgに移動して、そのフォルダー内の任意の画像を参照し、そのURLをimgsrcで使用できます。
これが誰かを助けることを願っています
IE 9:ユーザーがサーバーに投稿する前に画像を確認する場合:ユーザーは「信頼できるWebサイトリスト」にWebサイトを追加する必要があります。
javascriptのFileReader()とそのreadAsDataURL(fileContent)関数を使用して、ローカルドライブ/フォルダーファイルを表示できます。変更イベントを画像にバインドしてから、javascriptのshowpreview関数を呼び出します。これを試して -
<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;'>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title></title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
function showpreview(e) {
var reader = new FileReader();
reader.onload = function (e) {
$("#previewImage").attr("src", e.target.result);
}
//Imagepath.files[0] is blob type
reader.readAsDataURL(e.files[0]);
}
</script>
</head>
<body >
<div>
<input type="file" name="fileupload" value="fileupload" id="fileupload" onchange='showpreview(this)'>
</div>
<div>
</div>
<div>
<img width="50%" id="previewImage">
</div>
</body>
</html>
セキュリティルールに関するNewtangの見解はさておき、あなたのページを閲覧する人は誰でも正しい画像を持っていることをどうやって知るのc:\localfile.jpg
でしょうか?できません。できると思ってもできません。一つには、Windows環境を前提としています。
グーグルクロームブラウザを使用している場合は、このように使用できます
<img src="E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
ただし、Mozila Firefoxを使用する場合は、「ファイル」を追加する必要があります。
<img src="file:E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
自分自身または特定のクライアント専用にローカルWebサイトを展開している場合はmklink /D MyImages "C:/MyImages"
、cmdの管理者としてWebサイトのルートディレクトリで実行することで、これを回避できます。次に、htmlで、<img src="MyImages/whatever.jpg">
と、mklinkによって確立されたシンボリックリンクが、相対的なsrcリンクをCドライブ上のリンクに接続します。それは私にとってこの問題を解決したので、この質問に来る他の人を助けるかもしれません。
(人々のコンピューターでcmdコマンドを簡単に実行できないため、明らかにこれは公開Webサイトでは機能しません)
私は多くのテクニックを試しましたが、最終的にC#側とJS側で1つ見つけました。src属性への物理パスを指定することはできませんが、base64文字列をsrc toImgタグとして指定することはできます。以下のC#コード例を見てみましょう。
<asp:Image ID="imgEvid" src="#" runat="server" Height="99px"/>
C#コード
if (File.Exists(filepath)
{
byte[] imageArray = System.IO.File.ReadAllBytes(filepath);
string base64ImageRepresentation = Convert.ToBase64String(imageArray);
var val = $"data: image/png; base64,{base64ImageRepresentation}";
imgEvid.Attributes.Add("src", val);
}
これが役立つことを願っています