【问题标题】:How to implement Save and Save As without download using Javascript?如何使用Javascript实现不下载的保存和另存为?
【发布时间】:2021-05-23 10:54:51
【问题描述】:

我正在开发一个类似于图形编辑器的网络应用程序,它允许用户插入框、绘制连接等。

在尝试实现 SaveSave As 功能时,我坚持如何在本地保存文件。我尝试使用download 属性创建a 标签,然后触发他们的点击事件,但它不允许重命名和选择目录。相反,每次用户点击保存时,它都会开始新的下载,从而导致 Downloads 文件夹中出现大量重复。

function downloadFile(myFileName, myContent) {
    var pom = document.createElement('a');
    pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(myContent));
    pom.setAttribute('download', myFileName);
    pom.click();
}

我希望它如何工作,例如,diagrams.net。当使用 Device 存储创建新文件时,它首先会启动另存为框,询问名称和目录。之后,当点击保存时,已创建的文件将被覆盖,而不是下载文件的另一个版本。

我应该怎么做才能使用 Javascript 实现这一目标?

【问题讨论】:

    标签: javascript web-applications save overwrite save-as


    【解决方案1】:

    diagrams.net 使用全新的实验性 File System Access API 来做到这一点。截至 2021 年 2 月,该功能仅在 Chrome Edge 和 Opera 中受支持

    它提供了函数showSaveFilePicker,这里是一个如何使用它的例子。

    if("showSaveFilePicker" in window) {
      try {
        const file = window.showSaveFilePicker({
          types: [
            {
              description: "An XML File",
              accept: {"text/xml": [".xml"]}
            },
            {
              description: "A Text File",
              accept: {"text/plain": [".txt", ".text"]}
            }
          ]
        })
      } catch (e) {
        console.error(e)
      }
    } else {
      alert("Your Browser does not support the FSA API")
      // use <a download></a> fallback
    }
    

    请注意,我无法添加可执行代码 sn-p,因为沙盒脚本,例如:在 IFrame 中不允许显示文件选择器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多