使用Electron从锚标记中保存文件

时间:2015-05-04 14:38:07

标签: javascript electron

是否可以将常规锚标记指向打开用于保存文件的对话框的文件?就像网络浏览器一样。

例如:

<a download href="documents/somefile.pdf">Download</a>

让那个锚标签在点击时触发保存文件对话框?

我已尝试使用file://absolute-path-to-the-dir/documents/somefile.pdf,它想要在应用程序中打开该文件而不是下载它。

更新: 在Electron的后续版本中,我在编写此问题时使用的行为就像我希望的那样,会打开一个窗口,要求用户保存文件。

然而,在外部链接的情况下,并且想要仅在内部链接中保留Electron窗口并在默认操作系统选项中打开外部链接,Joshua Smith的答案就可以做到这一点。

2 个答案:

答案 0 :(得分:7)

在脚本中,您可以使用对话框模块使用保存文件对话框:

var fs = require('fs');
var dialog = require('dialog');
dialog.showSaveDialog(options, function (filePath) {
    fs.writeFile(pdfContents, filePath, function (err) {
        if(err) console.error(err);
    });
});

以下是文档:

https://github.com/atom/electron/blob/master/docs/api/dialog.md#dialogshowsavedialogbrowserwindow-options-callback

答案 1 :(得分:3)

我所做的是双重的。

mainWindow.webContents.on('new-window', function(event, url) {
    event.preventDefault();
    console.log("Handing off to O/S: "+url);
    shell.openExternal(url);
});

就是这样,只要我的应用中的某个页面想要打开一个新窗口,就会发生在实际的浏览器中。这也适用于打开PDF等。

然后我确保所有下载链接都使用target = _blank或window.open(),下载将在用户的浏览器中进行。