【问题标题】:how to update a file with javascript如何使用 javascript 更新文件
【发布时间】:2020-08-08 14:14:51
【问题描述】:

情况

我正在尝试构建一些东西以同时从多个镜像下载文件。镜像支持可恢复下载(感谢 http 部分内容等...),因此我能够从不同位置下载所有片段,并且当一切都在这里让用户“下载”它时,这要归功于众所周知的@987654324 @。我在那里偷了大部分代码:Handle file download from ajax post

但是使用链接问题的方法,我的项目有两个主要缺点:

  • 需要完成下载才能显示下载对话框。
  • 所有数据都由浏览器的缓存和内存管理。

问题

有没有办法在下载结束前(在调用window.URL.createObjectURL之前)显示下载对话框?并在稍后更新所选文件。

我正在寻找类似 php 的 fopen/fseek/fwrite 用于文件更新。

我查看了 File API,但没有发现关于写入数据的内容。我也想过使用本地存储,但所有数据都必须在提供下载对话框之前下载。

编辑

我如何看待事物:

我想知道是否有办法像常规下载一样下载生成的内容:让用户选择下载目标文件,然后才在用户空间 tempfilename 中完成下载...(移动被包围的框在 SaveAs 之后并将其更改为用户空间而不是浏览器空间)

【问题讨论】:

    标签: javascript file download


    【解决方案1】:

    允许浏览器编辑用户文件系统上的本地文件将是一个巨大的安全风险,因此它不是一个功能。

    可以下载同名文件,然后用户通过操作系统的文件管理器选择是否覆盖旧文件。

    NodeJS 具有您正在寻找的功能(在 javascript 中),但它仅适用于服务器

    【讨论】:

    • 我不想让 javascript 更新用户文件系统上的任何文件。当您下载文件时,用户授予您在该文件中写入数据的权限。计划是让用户在一开始和下载所有内容之前给我这个文件。然后在生成数据时将数据写入其中。问题是:有没有办法管理正在写入的文件的内容?
    • 我会做一些研究等待
    【解决方案2】:

    听起来您正在尝试制作类似于 bittorrent 的东西。我会创建一个空数组并为数组中的每个插槽创建一个 XHR (https://zeptojs.com/#$.ajax),将它们编译成一个 blob (https://github.com/eligrey/FileSaver.js) 并将其吐出。由于文件是新文件,因此无需请求许可。我以前做过,但我失去了它的来源

    【讨论】:

    • 可以使用可选警报,因为不会出现任何对话框
    • 我知道如何写一个 xhr 并且我知道如何将文件保存在磁盘上。一切都在链接的问题中。我的问题是如何能够允许用户在每个 xhr 结束之前选择要下载的文件。
    • 无法通过下载访问用户磁盘上的文件(浏览器内存:cookie、localstorage 等)。警报不会解决任何问题。
    • var filename = prompt("please enter a filename");
    • 问题是“如何更新文件?”,即使用户在提示下给出现有文件的名称,我也无法访问该文件。
    猜你喜欢
    • 1970-01-01
    • 2020-07-16
    • 2021-07-11
    • 2020-08-10
    • 2016-08-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多