<CLOSED> 如何在使用 javascript 保存时覆盖现有文件

Posted

技术标签:

【中文标题】<CLOSED> 如何在使用 javascript 保存时覆盖现有文件【英文标题】:<CLOSED> how to overwrite an existing file while saving using javascript 【发布时间】:2016-09-12 15:35:12 【问题描述】:

我正在尝试使用以下代码将文件保存在 javascript

var blob = new Blob([text], type: "text/plain;charset=utf-8");
saveAs(blob, fileName +"_"+unit+".json");

我想用当前文件覆盖与当前文件同名的任何现有文件,而不提示用户。

例如,如果 aaa_bbb.json 存在于用户下载文件夹中,我想将此保存为 aa_bbb.json,它应该直接覆盖现有文件,而不是要求用户按名称 aaa_bbb(1) 保存文件。

完整功能如下:

function showPopup(Attributes)
var htmlString = getWindowContent(Attributes);
map.infoWindow.setTitle("<b>Site Name : </b>"+ fileName+"<br><b>Unit Name : </b>"+ unit+"<br><b>Site Area : </b>"+ polyArea+"<br><b>Select soil types & click  </b><button id=\"btn-save\" type=\"submit\">Save to file</button>");
map.infoWindow.setContent(htmlString);
map.infoWindow.resize(300,300);    
map.infoWindow.show(map.toScreen(currentClick), map.getInfoWindowAnchor(map.toScreen(currentClick)));

$("#btn-save").click(function() 
    var array = [];
        $("#tbl input[name='link']").each(function() 
          //for each checked checkbox, iterate through its parent's siblings
            subArray = $(this).parent().siblings().map(function() 
                return $(this).text().trim();
            ).get();
            var cokey = subArray[2];
            var mukey = subArray[3];
            if(array == null)
                var subArray = [];
                subArray.push(cokey);
                array.push(
                    "mukey":mukey,
                    "cokeyArray": subArray
                );
            else
                var bool = false;
                array.forEach(function(obj)
                    if(obj.mukey==mukey)
                        obj.cokeyArray.push(cokey);
                        bool = true;
                    
                );
                if(bool == false)
                    var subArray = [];
                    subArray.push(cokey);
                    array.push(
                        "mukey":mukey,
                        "cokeyArray": subArray
                    );
                
            
           array.push(mukey);
        )
        //to print the value of array

    var text = getFinalJson(Attributes, array);
    var blob = new Blob([text], type: "text/plain;charset=utf-8");
    //get date for fileName
    getDateFileName();
    getParams(url);
    //console.log("Before save ",fileName,unit);
    saveAs(blob, fileName +"_"+unit+".json");
    setTimeout(window.location.href = "http://myaddress.com",2000);
);

有可能吗?如果是,有人可以告诉我该怎么做吗?

谢谢

【问题讨论】:

假设浏览器内的 JS 没有文件系统调用,也许你应该解释一下你使用什么平台/库来提供这个 saveAs 调用?对于不标准的函数调用,我们无法为您提供帮助。 如果您访问了一个站点,并且它在没有询问您的情况下覆盖了您计算机上的文件,您会有什么感受?因为这个原因,这是不可能的。 我已经在下面发布了我的完整功能。 @BadHorsie 是的,我同意。我还是问了以防万一。我们可以从建议的名称中删除“(1)”部分吗? @MarcB — 它是the discontinued Writer API 的一部分。 【参考方案1】:

没有。这是不可能的。您可以使用建议的文件名触发下载,但您不能选择访问者计算机上的文件来简单地覆盖。这将是一个重大的安全问题。

【讨论】:

是的,我想至少我们可以从建议的名称中删除“(1)”部分吗? @HiranavaDas — 不。这是浏览器解决文件名冲突的标准方式。它是在您的代码完成运行很久之后完成的。

以上是关于<CLOSED> 如何在使用 javascript 保存时覆盖现有文件的主要内容,如果未能解决你的问题,请参考以下文章

jsp报错java.io.IOException: Stream closed

如何在评论 div 下打开回复表单 [关闭]

如何在java中解析具有<map-Map><map-Entry><map-Key><map-Value>的xml文件[关闭]

如何在java中检查流中的参数? [关闭]

如何在java中编写更短的双数? [关闭]

如何使用 python 在 <div> 元素内写一些东西? [关闭]