2014-02-14 2 views
0

html로 편집기를 만들었습니다. 편집자 텍스트가 브라우저 다운로드 폴더에 저장되었거나 다운로드되었습니다. 페이지가 tomcat에 저장되었으므로 파일 (편집기 텍스트)을 서버 WEB-INF 폴더. 내 검색에서 JSP로만이 작업을 수행 할 수 있음을 발견했습니다. JSP에서 경로를 작성하여 다운로드가 WEB-INF에 저장되도록하려면 어떻게해야합니까? 아래 html 페이지 코드에 그것을 포함시킬 수 있습니까? 그렇다면 코드가 어떻게되어야합니까?localhost에 파일 저장

<!DOCTYPE html> 
<html> 
<head> 
<meta content="text/html;charset=utf-8" http-equiv="Content-Type"> 
<meta content="utf-8" http-equiv="encoding"> 
<title>ACE in Action</title> 
<style type="text/css" media="screen"> 
    #editor { 
     position: absolute; 
     top: 0; 
     right: 0; 
     bottom: 7%; 
     left: 0; 
    } 
</style> 
</head> 
<body> 

<div id="editor"> 
Blah blah blah 
</div> 


<script src="ace-builds-master/src-noconflict/ace.js" type="text/javascript" charset="utf-8"> 
</script> 
<script> 
var editor = ace.edit("editor"); 
editor.setTheme("ace/theme/cobalt"); 
editor.getSession().setMode("ace/mode/gc"); 
</script> 

<button type= "button" style="position: absolute; left: 10%; bottom: 2%;" id="execute" onclick="saveTextAsFile()">Click to execute</button> 

<script type='text/javascript'> 
function saveTextAsFile() 
{ 
    var script = ace.edit("editor"); 
    var textToWrite = script.getValue() 
    var textFileAsBlob = new Blob([textToWrite], {type:'.c'}); 
    var fileNameToSaveAs = "my.c"; 

var downloadLink = document.createElement("a"); 
downloadLink.download = fileNameToSaveAs; 
    if (window.webkitURL != null) 
    { 
    downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob); 
    } 
    else 
    { 
    downloadLink.href = window.URL.createObjectURL(textFileAsBlob); 
    downloadLink.style.display = "none"; 
    document.body.appendChild(downloadLink); 
    } 

} 
</script> 


</body> 
</html> 

답변

0

현재 html/javascript 편집기는 클라이언트 측 (즉, 웹 브라우저)에서 실행됩니다. JSP는 서버 측에서 실행됩니다. 현재 로컬에서 서버를 실행하고 있습니다. 문서에 대한 링크를 동적으로 만드는 것처럼 보입니다. document.body.appendChild(downloadLink); 사용자가 링크를 클릭하면 웹 브라우저는 로컬 파일 시스템에 대한 액세스 권한이있는 "파일 대화 상자"를 호출합니다. "파일 대화 상자"는 서버 파일 시스템에 액세스 할 수 없습니다 (즉, 배포를 로컬 호스트에서 원격 서버로 이동하는 경우).

그래서 원격 서버를 실행하지 않는다고하면 웹 브라우저의 파일 대화 상자에서 WEB-INF 위치로 이동하면됩니다. 나는 당신이 뭔가 더 노력하고 있다고 생각 하나?

대신 "textFileAsBlob"을 서버에 보내려면 자바 스크립트를 사용하면됩니다. 서버에 대한 Ajax 요청 (예 : HTTP POST)을 수행하도록 자바 스크립트 코드를 확장합니다. 그런 다음 서버는 요청을 검사 한 다음 파일을 서버의 파일 시스템에 저장해야합니다 (사용자가 요청한 것으로 가정). 이것이 맞다면 많은 서블릿 파일 업로드 라이브러리 중 하나를 사용할 수 있습니다. 예 : https://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi

그래서 맞을 경우. 클라이언트에서 서버로 데이터를 전송하려고합니다. "링크 생성"을 서버에 대한 ajax 호출로 바꿔야합니다. 서버에 "파일 업로드"처리를 추가하십시오.

희망은 도움이 :) 행운을 빌어 요.

+0

감사합니다. 정말 좋은 답변입니다! 아주 잘 설명했다! 아약스를 배우고 사용할 것입니다. –

+0

WEB-INF 폴더에 내 경로를 저장하면 자동으로 삭제할 수있는 방법이 있습니까? 또는 alteast를 열고 내용을 지우고 새로운 정보로 업데이트 하시겠습니까? –

+0

WEB-INF는 일반적으로 이슈 (클래스, 라이브러리, 내부 구성 파일)를 프로그래밍하는 데 사용됩니다. 대부분의 CMS (Content Management Systems)는 파일 시스템이 아닌 데이터베이스에 데이터를 저장합니다. 파일 시스템에 저장해야하는 경우 웹 응용 프로그램을 실행하는 사용자 계정이 액세스 할 수있는 곳이면 어디에서든지 WEB-INF 외부에 저장할 수 있습니다. 앱 실행 중에 WEB-INF 디렉토리를 업데이트하면 모든 종류의 문제가 발생합니다. 따라서 나는 피할 것이다. 아마도 확장 된 아키텍처 토론을 원한다면 새로운 질문을 열어야합니다. 행운을 빕니다 :) – lorinpa