Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在本地主机上保存文件_Javascript_Html_Jsp_Tomcat_Servlets - Fatal编程技术网

Javascript 在本地主机上保存文件

Javascript 在本地主机上保存文件,javascript,html,jsp,tomcat,servlets,Javascript,Html,Jsp,Tomcat,Servlets,我已经用html创建了一个编辑器,编辑器文本现在保存(或下载)在我的浏览器下载文件夹中,因为页面在tomcat上,我希望它将文件(编辑器文本)保存在服务器WEB-INF文件夹中。在我的搜索中,我发现我只能通过JSP来实现这一点,我应该如何在JSP中编写路径,以便下载保存在WEB-INF中?我可以在下面的html页面代码中包含它吗?如果是这样,代码应该是什么 <!DOCTYPE html> <html> <head> <meta content="text

我已经用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;
右:0;
底部:7%;
左:0;
}
废话废话
变量编辑器=ace.edit(“编辑器”);
编辑:setTheme(“ace/theme/cobalt”);
editor.getSession().setMode(“ace/mode/gc”);
点击执行
函数saveTextAsFile()
{
var script=ace.edit(“编辑器”);
var textToWrite=script.getValue()
var textFileAsBlob=newblob([textToWrite],{type:'.c'});
var fileNameToSaveAs=“my.c”;
var downloadLink=document.createElement(“a”);
downloadLink.download=fileNameToSaveAs;
如果(window.webkitURL!=null)
{
downloadLink.href=window.webkitURL.createObjectURL(textFileAsBlob);
}
其他的
{
downloadLink.href=window.URL.createObjectURL(textFileAsBlob);
downloadLink.style.display=“无”;
document.body.appendChild(下载链接);
}
}

当前的html/javascript编辑器在客户端(即web浏览器)上运行。JSP在服务器端运行。当前您正在本地运行服务器。看起来您正在动态创建指向文档的链接:
document.body.appendChild(downloadLink)当用户单击链接时,web浏览器将调用一个可以访问本地文件系统的“文件对话框”。“文件对话框”将无法访问服务器文件系统(即,如果您将部署从本地主机移动到远程服务器)

因此,如果您说您永远不会运行远程服务器,那么您所要做的就是使用web浏览器的“文件”对话框导航到您的web-INF位置。我想你在尝试更多的东西

如果您想将“textFileAsBlob”发送到服务器,可以使用javascript。您可以扩展javascript代码,以向服务器执行ajax请求(例如HTTP POST)。然后,服务器需要检查请求,然后将文件保存到服务器的文件系统(假设这是您所要求的)。如果这是正确的,您可以使用许多servlet文件上载库中的一个。例如:

如果我是对的话。您希望将数据从客户端传输到服务器。您需要将“链接创建”替换为对服务器的ajax调用。将“文件上载”处理添加到服务器


希望对你有所帮助:)祝你好运。

谢谢你回答得真好!解释得很好!我有一个疑问,如果我把它保存在我的WEB-INF文件夹中,有没有办法自动删除它?或者打开它,删除内容,然后用新信息更新?WEB-INF通常用于编程工件(类、库、内部配置文件)。大多数内容管理系统(CMS)将数据存储在数据库中(而不是文件系统)。如果需要存储在文件系统上,则可以存储在WEB-INF之外(运行WEB应用的用户帐户可以访问的任何位置)。在应用程序运行时更新WEB-INF目录会产生各种问题。因此,我会避免。如果你真的想要一个扩展的架构讨论,也许你应该提出一个新的问题。祝你好运:)