我写了一个NodeJS/Express应用程序,当用户按下一个按钮时,它会生成并下载一个excel文档(使用ExcelJS创建)。当用户按下按钮时,文件会生成并下载到用户的默认下载位置。我希望用户能够在按下按钮时选择他们想要下载文件的位置。这可能吗?
我当前的JavaScript代码如下所示:
export_button.onclick = async function() {
await fetch('/download', {
method: 'POST'
})
.then(resp => resp.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = 'document.xlsx';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
});
}
3条答案
按热度按时间ojsjcaue1#
这在最新的基于Chrome的浏览器(Chrome、Edge、Opera)的桌面版本中是可能的。
当前支持:https://caniuse.com/mdn-api_window_showsavefilepicker
https://wicg.github.io/file-system-access/#api-showsavefilepicker
https://wicg.github.io/file-system-access/#enumdef-wellknowndirectory
我们使用这个来处理PDF文件:https://webpdf.pro/doc/(下一版本的草稿)。
请注意,您可以建议一个文件名和文件夹,自定义文件类型列表,提供多种类型!
事实上,我们有一个方法,其名称正是:
<pdf-file>.saveAs()
.Visual Studio Code的在线版本是另一个最近的用户:https://vscode.dev/.
不过,至少在未来几个月内,苹果和火狐可能会以隐私/安全问题为由拖延这一问题。
slmsl1lt2#
xqnpmsa83#
我不相信这是可能的,不。这种行为是由用户浏览器的设置控制的。对于大多数浏览器,甚至可能是所有的浏览器,默认的行为是总是下载文件到一个默认的位置,而不显示提示,用户可以改变其目的地或文件名。可以理解的是,你不能改变用户的浏览器设置从JavaScript。
很高兴看到我错了,我没有意识到文件系统访问API Cetin Sert的答案描述的存在。