html 파일이 로컬 (내 C 드라이브) 인 경우 작동하지만 html 파일이 서버에 있고 이미지 파일이 로컬 인 경우에는 작동하지 않습니다. 왜 그런 겁니까?
가능한 해결 방법이 있습니까?
html 파일이 로컬 (내 C 드라이브) 인 경우 작동하지만 html 파일이 서버에 있고 이미지 파일이 로컬 인 경우에는 작동하지 않습니다. 왜 그런 겁니까?
가능한 해결 방법이 있습니까?
src=""
답변:
클라이언트가 로컬 파일 시스템 파일을 요청한 다음 JavaScript를 사용하여 파일에 무엇이 있는지 알아낼 수 있다면 보안 취약점이됩니다.
이 문제를 해결하는 유일한 방법은 브라우저에서 확장을 빌드하는 것입니다. Firefox 확장 및 IE 확장은 로컬 리소스에 액세스 할 수 있습니다. Chrome은 훨씬 더 제한적입니다.
"C : /localfile.jpg"대신 "file : // C : /localfile.jpg"를 사용하면 안됩니까?
C:
인식 된 URI 체계가 아닙니다. file://c|/...
대신 시도하십시오 .
솔직히 가장 쉬운 방법은 서버에 파일 호스팅을 추가하는 것입니다.
IIS 열기
기본 웹 사이트 아래에 가상 디렉터리 추가
"NETWORK SERVICE"및 "IIS AppPool \ DefaultAppPool"에 대해 C : 드라이브의 폴더에 적절한 권한을 추가합니다.
기본 웹 사이트 새로 고침
그리고 당신은 끝났습니다. 이제 http : //yourServerName/whateverYourFolderNameIs/yourImage.jpg 로 이동하여 해당 폴더의 이미지를 찾아보고 img src에서 해당 URL을 사용할 수 있습니다.
이것이 누군가에게 도움이되기를 바랍니다.
IE 9 : 사용자가 이미지를 서버에 게시하기 전에 먼저보기를 원하는 경우 : 사용자는 웹 사이트를 "신뢰할 수있는 웹 사이트 목록"에 추가해야합니다.
javascript의 FileReader () 와 readAsDataURL (fileContent) 함수를 사용하여 로컬 드라이브 / 폴더 파일을 표시 할 수 있습니다. 변경 이벤트를 이미지에 바인딩 한 다음 자바 스크립트의 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 환경을 전제로합니다.
Google 크롬 브라우저를 사용하는 경우 다음과 같이 사용할 수 있습니다.
<img src="E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
그러나 Mozila Firefox를 사용하는 경우 "file"예를 추가해야합니다.
<img src="file:E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
자신 또는 특정 클라이언트를위한 로컬 웹 사이트를 배포하는 경우 mklink /D MyImages "C:/MyImages"
cmd의 관리자로 웹 사이트 루트 디렉터리에서 실행하여이 문제를 해결할 수 있습니다 . 그런 다음 html에서 do <img src="MyImages/whatever.jpg">
및 mklink에 의해 설정된 심볼릭 링크는 상대 src 링크를 C 드라이브의 링크와 연결합니다. 그것은 나를 위해이 문제를 해결했기 때문에이 질문에 오는 다른 사람들에게 도움이 될 수 있습니다.
(분명히 이것은 사람들의 컴퓨터에서 cmd 명령을 쉽게 실행할 수 없기 때문에 공개 웹 사이트에서는 작동하지 않습니다)
나는 많은 기술을 시도했고 마침내 C # 측과 JS 측에서 하나를 발견했습니다. src 속성에 물리적 경로를 제공 할 수 없지만 Img 태그에 대한 src로 base64 문자열을 제공 할 수 있습니다. 아래 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);
}
이것이 도움이되기를 바랍니다.
다음으로 시작 file:///
하고 다음으로 끝납니다 filename
.
<img src="file:///C:/Users/91860/Desktop/snow.jpg" alt="Snow" style="width:100%;">