program tip

왜 할 수

radiobox 2020. 9. 22. 08:01
반응형

왜 할 수 없습니까?


html 파일이 로컬 (내 C 드라이브) 인 경우 작동하지만 html 파일이 서버에 있고 이미지 파일이 로컬 인 경우에는 작동하지 않습니다. 왜 그런 겁니까?

가능한 해결 방법이 있습니까?


클라이언트가 로컬 파일 시스템 파일을 요청한 다음 JavaScript를 사용하여 파일에 무엇이 있는지 알아낼 수 있다면 보안 취약점이됩니다.

이 문제를 해결하는 유일한 방법은 브라우저에서 확장을 빌드하는 것입니다. Firefox 확장 및 IE 확장은 로컬 리소스에 액세스 할 수 있습니다. Chrome은 훨씬 더 제한적입니다.


"C : /localfile.jpg"대신 "file : // C : /localfile.jpg"를 사용하면 안됩니까?


로컬 html 페이지에 액세스하지 않는 한 브라우저는 로컬 파일 시스템에 액세스 할 수 없습니다. 이미지를 어딘가에 업로드해야합니다. html 파일과 동일한 디렉토리에 있으면 다음을 사용할 수 있습니다.<img src="localfile.jpg"/>


C:인식 된 URI 체계가 아닙니다. file://c|/...대신 시도하십시오 .


솔직히 가장 쉬운 방법은 서버에 파일 호스팅을 추가하는 것입니다.

  • IIS 열기

  • 기본 웹 사이트 아래에 가상 디렉터리 추가

    • 가상 경로는 브라우저에서 찾아 보려는 것입니다. 따라서 " serverName / images 를 선택 하면 http : // serverName / images 로 이동하여 찾아 볼 수 있습니다 .
    • 그런 다음 C : 드라이브에 물리적 경로를 추가합니다.
  • "NETWORK SERVICE"및 "IIS AppPool \ DefaultAppPool"에 대한 C : 드라이브의 폴더에 적절한 권한을 추가합니다.

  • 기본 웹 사이트 새로 고침

  • 그리고 당신은 끝났습니다. 이제 http : //yourServerName/whateverYourFolderNameIs/yourImage.jpg 로 이동하여 해당 폴더의 모든 이미지를 탐색하고 img src에서 해당 URL을 사용할 수 있습니다.

이것이 누군가를 돕기를 바랍니다.


IE 9 : 사용자가 이미지를 서버에 게시하기 전에 먼저보기를 원하는 경우 : 사용자는 웹 사이트를 "신뢰할 수있는 웹 사이트 목록"에 추가해야합니다.


보안 규칙에 대한 Newtang의 관찰은 제쳐두고 귀하의 페이지를 보는 사람이 올바른 이미지를 갖게 될 것인지 어떻게 알 수 c:\localfile.jpg있습니까? 당신은 할 수 없습니다. 할 수 있다고 생각하더라도 할 수 없습니다. 한 가지는 Windows 환경을 전제로합니다.


나는 당신이하려는 일에 대해 두 가지 가능성을 봅니다.

  1. 서버에서 실행되는 웹 페이지가 원래 디자인 한 컴퓨터에서 파일을 찾기를 원하십니까?

  2. 페이지에서보고있는 PC에서 가져 오시겠습니까?

옵션 1은 의미가 없습니다. :)

옵션 2는 보안 허점이며, 브라우저는 웹 페이지 (웹에서 제공됨)가 뷰어의 컴퓨터에 콘텐츠를로드하지 못하도록 금지합니다.

카일 허드슨이 당신이해야 할 일을 말했지만, 그것은 너무 기초적이어서 이것이 당신이하고 싶은 전부라고 믿기가 어렵다는 것을 알았습니다.


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">

이미지도 업로드 한 다음 서버의 이미지에 연결해야합니다.


사용자가 이미지를 선택하는 것은 어떻습니까? input : file 태그를 사용한 다음 이미지를 선택한 후 클라이언트 측 웹 페이지에 표시 하시겠습니까? 그것은 대부분의 일에서 가능합니다. 지금은 IE에서 작동하도록 노력하고 있지만 모든 Microsoft 제품과 마찬가지로 클러스터 fork ()입니다.


자신 또는 특정 클라이언트를위한 로컬 웹 사이트를 배포하는 경우 mklink /D MyImages "C:/MyImages"cmd의 관리자로 웹 사이트 루트 디렉터리에서 실행하여이 문제를 해결할 수 있습니다 . 그런 다음 html에서 do <img src="MyImages/whatever.jpg">및 mklink에 의해 설정된 심볼릭 링크는 상대 src 링크를 C 드라이브의 링크와 연결합니다. 그것은 나를 위해이 문제를 해결했기 때문에이 질문에 오는 다른 사람들에게 도움이 될 수 있습니다.

(분명히 이것은 사람들의 컴퓨터에서 cmd 명령을 쉽게 실행할 수 없기 때문에 공개 웹 사이트에서는 작동하지 않습니다)


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>
        &nbsp;
    </div>
    <div>
    <img width="50%" id="previewImage">
    </div>
</body>
</html>

참고URL : https://stackoverflow.com/questions/4090712/why-cant-i-do-img-src-c-localfile-jpg

반응형