【问题标题】:Save file on localhost在本地主机上保存文件
【发布时间】:2014-03-13 08:15:07
【问题描述】:

我已经在 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>

【问题讨论】:

    标签: javascript html jsp tomcat servlets


    【解决方案1】:

    您当前的 html/javascript 编辑器在客户端(即网络浏览器)上运行。 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 调用。将“文件上传”处理添加到您的服务器。

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

    【讨论】:

    • 谢谢你非常好的回答!很好解释!将学习和使用 ajax。
    • 我有一个疑问,如果我将它的路径保存在我的 WEB-INF 文件夹中,有没有一种方法可以自动删除它?或者至少打开它,删除内容,然后用新信息更新?
    • WEB-INF 通常用于对工件(类、库、内部配置文件)进行编程。大多数内容管理系统 (CMS) 会将数据存储在数据库(而不是文件系统)中。如果您需要存储在文件系统上,您可以存储在 WEB-INF 之外(运行您的 Web 应用程序的用户帐户可以访问的任何地方)。在应用程序运行时更新 WEB-INF 目录会产生各种问题。因此,我会避免。如果真的想要扩展架构讨论,也许您应该提出一个新问题。祝你好运:)
    猜你喜欢
    • 2019-10-31
    • 2014-01-04
    • 2012-01-22
    • 1970-01-01
    • 2014-07-26
    • 2020-11-18
    • 2017-09-05
    • 1970-01-01
    相关资源
    最近更新 更多