提示下载位置而不是直接下载

13

我正在使用JavaScript创建一个CSV元素,然后模拟点击以下载相应的文件。

但是我希望它不是直接下载,而是打开下载提示框来选择要下载的文件位置。

var csvString = Papa.unparse(result,{
                                quotes: false,
                                delimiter: ",",
                                newline: "\r\n"
                        });
var a         = document.createElement('a');
a.href        = 'data:attachment/csv,' + escape(csvString);
a.download    = "download.csv";
a.click();

如何完成此操作?


1
你不能这样做。用户可以选择不同文件类型的操作方式。作为应用程序开发者,你无法覆盖他(用户)的选择。 - user663031
@torazaburo 这个问题是用户没有选择的权利。应用程序开发者说文件名是“download.csv”,并且在没有用户干预的情况下以这样的方式保存。 - Chet
如果用户选择了不提示就保存文件,那么这种情况就会发生。用户需要撤销这个选择;具体的方法取决于操作系统。例如,Chrome在其设置中有一个选项“在下载前询问每个文件的保存位置”。然后用户就可以选择保存文件的位置和/或更改默认名称。 - user663031
2个回答

18

这是一个浏览器特定的设置。

  1. 在Chrome中:转到 设置 > 下载 ,然后选择复选框 在下载前询问每个文件的保存位置
  2. 在Firefox中:进入 工具 > 选项,打开 常规 选项卡并选择单选按钮 每次都询问我文件的保存位置
  3. 在Internet Explorer 8中:当下载对话框弹出时,点击 保存 按钮并选择位置。

6
有没有办法让浏览器提示用户,如果他们的设置已经自动设置了?我的一个使用案例是,用户希望将文件下载到本地机器上的特定文件夹中。这与他们的常规下载不同。理想情况下,我想建议一个文件夹,并让用户允许它。这是为了商业应用程序,因此我们有很高的信心,建议的文件夹将存在,并且用户会允许保存。 - Michael

2
您需要使用的是不被所有浏览器支持但似乎正在推广的文件系统访问API。如果您正在开发“内部使用”的东西,那么您可能会用得上它。如果您正在为大众开发,则仍然可以实现它,但同时要加入一些try-catch以回退到默认下载。
阅读类似问题的这个答案以获取更多信息。

文件系统访问API需要https协议,只有在本地开发时您可能没有注意到。这意味着,即使在内部服务器上运行,您也需要一个有效的证书,否则您将需要为每个客户端添加一个自签名证书的安全例外。 - nhaggen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接