프로젝트 - "로컬 리소스를로드 할 수 없습니다:file:/// C:... jpg"Java EE Tomcat



이클립스 톰캣 서버 추가 (6)

ABSOLUTE PATH를 사용하여 이미지 이름을 참조하지 마십시오. 예 : C:/xamp/www/Archivos/images/templatemo_image_02_opt_20160401-1244.jpg . 웹 서버 내의 해당 위치에 대한 참조를 사용해야합니다. 예를 들어 프로세스가 실행중인 위치에 따라 ../../Archivos/images/templatemo_image_02_opt_20160401-1244.jpg 를 사용합니다.

https://code.i-harness.com

좋은 저장 후 파일 시스템에서 그림을 가져 오려고합니다 (데이터베이스에 넣는 대신 디스크에 복사하고 db에 경로 넣기).

  1. 나는 그림을 c : \ images \ folder에 저장하고 전체 경로가 c : \ images \ mypic.jpg 인 것으로 가정했다.
  2. 내가 그것을 검색하려고하면 일부 자바 코드를 사용하여 img src 속성을 <img src="c:\images\mypic.jps"> 로 설정합니다.
  3. 브라우저 콘솔에서이 오류를 발견했습니다 Not allowed to load local resource: file:///C://images//mypic.jpg

질문 : 이러한 경로 문제를 해결하는 방법은 무엇입니까? 사진을 어디에 보관해야합니까? 어디에서 가져와야합니까?


http 위치와 디스크 위치 개념이 다릅니다. 당신이해야 할 일은 다음과 같습니다.

  1. 업로드 된 파일 summer.jpg
  2. 알려진 위치 (응용 프로그램 위치) 아래에서 디스크로 이동합니다 (예 : c:\images\summer.jpg
  3. text로 이미지를 나타내는 db 레코드에 삽입하기 summer.jpg
  4. 그것을 표시하려면 일반 <img src="images/summer.jpg" />
  5. 응용 프로그램 /images 아래에 c:\images\ 제공 할 무언가 (예 : 아파치)가 필요합니다. 2 단계에서이 작업을 수행 할 수 없다면 웹 루트 아래에 c:\my-applications\demo-app\build\images 저장해야합니다 c:\my-applications\demo-app\build\images

많은 브라우저가 보안 정책을 변경하여 파일 공유 나 로컬 리소스에서 직접 데이터를 읽을 수 없도록했습니다. Tomcat 인스턴스가 제공 할 수있는 파일을 어딘가에 배치하고 생성 한 HTML에 "일반"http url을 넣어야합니다. 이것은 Tomcat이 "정적"컨텐츠로 제공 할 디렉토리에 파일을 넣고 그 파일을 읽고 제공하는 서블릿을 제공하여 수행 할 수 있습니다.


보내는 태그 <img src="c:\images\mypic.jpg"> 는 사용자 브라우저가 파일 시스템의 이미지에 액세스하게합니다. c:\images 에있는 폴더에 이미지를 저장해야한다면 images.jsp와 같은 서블릿을 만들 것을 제안합니다. 매개 변수가 파일의 이름을 사용하면 서블릿 응답 내용을 image / jpg에 설정 한 다음 바이트를로드합니다. 서버 위치에서 이미지를 가져 와서 응답으로 보냅니다.

하지만 애플리케이션을 만드는 데 사용하는 것은 무엇입니까? 순수 서블릿인가요? 봄? JSF?

Here 대한 정보와 방법에 대한 정보를 찾을 수 있습니다.


이 응용 프로그램을 로컬로 실행하고 보안에 문제가없는 경우 간단한 expressjs 솔루션이 있습니다.

server.js 또는 app.js 파일에 다음을 추가하십시오.

app.use('/local-files', express.static('/'));

/local-files 아래에 전체 루트 디렉토리를 제공합니다. 말할 필요도없이 로컬 컴퓨터가 아닌 다른 곳에이 응용 프로그램을 배포 할 계획이라면 이것은 매우 나쁜 생각입니다.

이제 간단하게 할 수 있습니다.

<img src="/local-files/images/mypic.jps"/> 

참고 : 저는 macOS를 실행하고 있습니다. Windows를 사용하는 경우 경로 문자열에서 'C : \'를 검색하여 제거해야 할 수 있습니다.


크롬에서는 런타임 플래그로이 기능을 허용 할 수 있습니다. - 파일로부터의 파일 접근 가능

그러나 런타임 플래그 --disable-web-security를 ​​전달하지 않으면 Chrome의 현재 버전 (37, 38)에 문제가있는 것 같습니다.

이는 단기적인 해결 방법을 제외하고 용납 할 수없는 해결책이지만 https://code.google.com/p/chromium/issues/detail?id=379206 문제로 확인되었습니다.





storage