search

Home  >  Q&A  >  body text

javascript - js怎么实现修改本地文件

首先不使用IE的对象。我的思路是用上传的方法上传文件,让其上传到本地,而不是上传到后台,然后用js读取上传的文件和修改,最后再下载下来,不知这个方法行不行。或者有没其他方法。另外不是很了解从<input file="">到后台接收文件之间发生了什么事

大家讲道理大家讲道理2906 days ago402

reply all(2)I'll reply

  • 迷茫

    迷茫2017-04-10 15:09:44

    http://segmentfault.com/q/1010000000655751/a-1020000000655760

    reply
    0
  • 迷茫

    迷茫2017-04-10 15:09:44

    第一次碰到这种需求,好奇找资料,参考公子的答案,写了个DEMO,兼容确实无解,你需要借助后台上传做中转了那样。

    javascript<!doctype>
    <html>
      <body>
        <input type="file" name="file" id="file" />
        <textarea cols="50" rows="20"></textarea>
        <button>保存</button>
        <script type="text/javascript">
          var name = '未命名';
          var input = document.getElementById('file');
          var textarea = document.getElementsByTagName('textarea')[0];
    
          input.addEventListener('change', function () {
            var files = document.getElementById('file').files;
            var file = files.item(0);
            name = file.name;
            var reader = new FileReader();
            reader.onloadend = function (e, content) {
              textarea.value = e.target.result;
            };
            reader.readAsText(file, 'utf-8');
          });
    
          function fake_click(obj) {
            var ev = document.createEvent("MouseEvents");
            ev.initMouseEvent(
              "click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null
            );
            obj.dispatchEvent(ev);
          }
    
          document.getElementsByTagName('button')[0].addEventListener('click', function(e) {
            var urlObject = window.URL || window.webkitURL || window;
            var export_blob = new Blob([textarea.value]);
            var save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
            save_link.href = urlObject.createObjectURL(export_blob);
            save_link.download = name;
            fake_click(save_link);
          });
        </script>
      </body>
    </html>
    

    reply
    0
  • Cancelreply