我在html中创建了一个编辑器,编辑器文本现在保存(或下载)在我的浏览器下载文件夹中,因为页面在tomcat上我希望它将文件(编辑器文本)保存在服务器WEB-INF中夹。在我的搜索中,我发现我只能通过JSP执行此操作,如何在JSP中编写路径以便将下载保存在WEB-INF中?我可以在下面的html页面代码中包含它吗?如果是这样,代码怎么样?
<!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 :(得分:1)
您当前的html / javascript编辑器在客户端(即Web浏览器)上运行。 JSP在服务器端运行。目前,您在本地运行服务器。看起来您正在动态创建指向文档的链接:document.body.appendChild(downloadLink);
当用户单击链接时,Web浏览器将调用可以访问本地文件系统的“文件对话框”。 “文件对话框”将无法访问服务器文件系统(即,如果将部署从本地主机移动到远程服务器)。
因此,如果您说永远不会运行远程服务器,那么您只需使用Web浏览器的文件对话框导航到WEB-INF位置即可。我假设你正在尝试更多的东西?
如果您想要将“textFileAsBlob”发送到服务器,则可以使用javascript执行此操作。您可以扩展您的javascript代码以执行到服务器的ajax请求(例如HTTP POST)。然后,服务器需要检查请求,然后将文件保存到服务器的文件系统(假设这就是您要求的)。如果这是正确的,您可以使用众多servlet文件上载库之一。例如:https://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
所以,如果我是对的。您希望将数据从客户端传输到服务器。您需要使用对服务器的ajax调用替换“链接创建”。向服务器添加“文件上载”处理。
希望有所帮助:)祝你好运。