【问题标题】:Replace file blob in browser?替换浏览器中的文件blob?
【发布时间】:2015-10-19 15:56:24
【问题描述】:

我早些时候问过这个问题,但有人否决并指责我试图将文件写入本地文件系统而不读取。

我在企业环境中有一个网站,只能在 chrome 中访问,所以请记住这一点。

我可以在我的 PC 上选择一个本地文件夹并在浏览器中打开所有子文件夹和文件。我正在使用客户端 javascript 来解析这些文件并寻找一种特定类型的 .xml 文件,该文件在内部用于呈现类似演示文稿的 powerpoint。我可以更改此 xml 文件并将其作为 blob 吐出。

我想做但不知道如何用修改后的数据/blob替换原始文件中的数据或blob。

【问题讨论】:

    标签: javascript file blob


    【解决方案1】:

    用户可以与数据块交互吗?如果是这样,您可以使用保存文件功能并覆盖原始文件。

    function saveFile( data )
    {
      var textFileAsBlob = new Blob([yourData], {type:'text/plain'});
      //or replace the code above with your already formed blob
    
      var fileNameToSaveAs = "File_Name_Goes_Here.xml";
    
      var downloadLink = document.createElement("a");
      downloadLink.download = fileNameToSaveAs;
      //downloadLink.innerHTML = "Download File";
      if (window.webkitURL != null){
          // Chrome allows the link to be clicked
          // without actually adding it to the DOM.
          downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
      }
      else{
          // Firefox requires the link to be added to the DOM
          // before it can be clicked.
          try {
              downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
              downloadLink.onclick = destroyClickedElement;
              downloadLink.style.display = "none";
              document.body.appendChild(downloadLink);
          }
          catch( e ){
              console.log("error saving firefox file")
          }
          // IE 10+
          try {
              window.navigator.msSaveBlob(textFileAsBlob, fileNameToSaveAs);
          }
          catch(e){
              console.log("error saving IE file")
          }
      }
    
      try {
          downloadLink.click();
      }
      catch(e) {
          console.log("Unable to click the download link.  Are you using IE?")
      }
    
    }
    

    我在堆栈溢出时从其他地方抓取了这段代码。我不记得是谁提供的署名了:-(

    【讨论】:

    • 我知道你说这只是 chrome 的问题,但我想我会为可能偶然发现这个问题的其他人添加其他其他浏览器支持。如果您不需要它们,只需删除 if/try/catch 块。
    • 仅仅通过阅读上面的代码,如果意图是重新下载修改后的文件,这将有效。我需要选择一个完整的 xml 目录,更改每个目录,然后我要做的是压缩所有文件并提供 zip 作为下载链接。所以基本上我在选择一个文件夹后会有一个 xml 数组。我将遍历每个文件并将其数据读入一个变量,进行更改,但我需要将这些更改应用于数组中的原始文件。
    • 为什么你需要提供一个压缩文件来下载你正在更改文件的地方?
    • 我不确定这与我的问题有什么关系。
    • 你能重新设计或重新提出问题吗?似乎大多数人对您尝试做的事情的理解与您的预期不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2019-01-18
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多