使用JavaScript获取浏览器下载路径

23

我在网上搜索了很多答案,但没有找到任何有用的信息。

是否有一种方法可以通过Javascript获取浏览器下载路径?

我不想自己设置路径,我只想知道用户下载文件后的位置。


5
这听起来很邪恶,我怀疑在跨浏览器的情况下可能不太可能实现。 - hugomg
4个回答

32

这是不可能的。

纯浏览器JavaScript无法获取用户文件系统的信息。默认下载路径可能包含敏感信息,存在风险:

想象一下,有人把下载文件存储在C:\CompanyName\RealName\PhoneNumber\Adress\


1
C:\Windows\Users\Username\Downloads 已经够糟糕了。 - Quentin
2
如果我说错了,请纠正我:我无法通过浏览器以编程方式访问任何文件系统文件夹。任何与文件系统相关的操作(读取或保存文件)只能由用户使用<input>或拖放接口完成。是这样吗? - Bolza
1
@SteNonesiste,你说得对。目前没有跨浏览器的解决方案可以执行真正的文件系统相关操作。 - Rob W

12

浏览器有意从本地文件系统中隔离,以防止脚本攻击。您无法获取此信息。


2

我不理解这个答案。npm模块使用了Node的C扩展execSync。这难道不是用于服务器端的吗? - Kenji Noguchi
1
我使用它来执行通常是客户端的测试脚本,用于TestCafe。在Windows Chrome上运行得非常好,但当我开始在Mac上运行它时,我肯定需要进行一些调整,也许还需要针对其他浏览器进行一些调整,因为这似乎是大多数功能函数的普遍趋势。npm本身只是将其安装在服务器上,因此当您执行代码时,您的机器上将拥有必要的库。 - Seth Eden
1
@SethEden 我可以确认这在 Mac 上也适用。而且我的确切用例也是 testcafe :-) - hitautodestruct
除了添加额外的模块,还有没有其他替代方法? - Adépòjù Olúwáségun
我遇到了这个错误:在“.../node_modules/downloads-folder”中找不到模块“registry-js” - Zedd

1
也许答案不正确。您可以在某些IE版本中使用它。如果您将其用于内部网站开发,如需要文件的产品/工作流程的开发,则有效。它在其他浏览器(如Schrome,Firefox,Safari)中无效,据我所知。
<input
type="hidden"
id="steel_that_path"
name="steel_that_path" />


<input type="file"
id="this one you use to upload file"
name="this one you use to upload file"                                              
accept="application/octet-stream"                                                 
onBlur="document.getElementById('steal_that_path').value=this.value;"/> 

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