用Electron打开外部文件

用Electron打开外部文件,electron,Electron,我有一个运行的电子应用程序,到目前为止工作得很好。对于上下文,我需要运行/打开一个外部文件,它是一个Go-lang二进制文件,用于执行一些后台任务。 基本上,它将充当后端,并公开Electron应用程序将使用的API 到目前为止,我所了解的是: 我尝试使用“节点方式”打开该文件,但打开示例txt文件失败,可能是因为路径问题 Electron API公开了一个事件,但它缺少文档/示例,我不知道它是否有用 就这样。 如何在Electron中打开外部文件?我知道这并不完全符合您的规范,但它确实将g

我有一个运行的电子应用程序,到目前为止工作得很好。对于上下文,我需要运行/打开一个外部文件,它是一个Go-lang二进制文件,用于执行一些后台任务。 基本上,它将充当后端,并公开Electron应用程序将使用的API

到目前为止,我所了解的是:

  • 我尝试使用“节点方式”打开该文件,但打开示例txt文件失败,可能是因为路径问题

  • Electron API公开了一个事件,但它缺少文档/示例,我不知道它是否有用

就这样。
如何在Electron中打开外部文件?

我知道这并不完全符合您的规范,但它确实将golang二进制文件和Electron应用程序完全分开

我这样做的方式是将golang二进制文件作为web服务公开。像这样

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    //TODO: put your call here instead of the Fprintf
    fmt.Fprintf(w, "HI there from Go Web Svc. %s", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/api/someMethod", handler)
    http.ListenAndServe(":8080", nil)
}
然后从Electron使用javascript函数对web服务进行ajax调用。像这样(您可以使用jQuery,但我发现这个纯js很好用)

用这种方法你可以做一些类似的事情

get('localhost/api/somemethod', 'text')
  .then(function(x){
    console.log(x);
  }

Electron允许使用nodejs包

换句话说,导入节点包就像您在节点中一样,例如:

var fs = require('fs');
要运行golang二进制文件,可以使用模块。文件很详尽


编辑:必须解决路径差异。
打开文件
事件是由窗口触发的客户端事件。这不是你想要的。

有几个api,你可能想研究一下,看看哪个对你有帮助

财政司司长 该模块允许您直接打开文件进行读写

var fs = require('fs');
fs.readFile(p, 'utf8', function (err, data) {
  if (err) return console.log(err);
  // data is the contents of the text file we just read
});
路径 该模块允许您以平台无关的方式构建和解析路径

var path = require('path');
var p = path.join(__dirname, '..', 'game.config');
壳 该api是一个纯电子api,您可以使用它以给定路径shell执行文件,该路径将使用OS默认应用程序打开该文件

const {shell} = require('electron');
// Open a local file in the default app
shell.openItem('c:\\example.txt');

// Open a URL in the default way
shell.openExternal('https://github.com');
child_过程 假设您的golang二进制文件是一个可执行文件,那么您将使用它来调用它并与之通信。这是一个节点api

var path = require('path');
var spawn = require('child_process').spawn;

var child = spawn(path.join(__dirname, '..', 'mygoap.exe'), ['game.config', '--debug']);
// attach events, etc.
插件
如果您的golang二进制文件不是可执行文件,那么您需要制作一个包装器。

也许您正在寻找这个

dialog.showOpenDialog
请参阅:

如果使用electron@13.1.0,您可以这样做:

const { dialog } = require('electron')
console.log(dialog.showOpenDialog({ properties: ['openFile', 'multiSelections'] }))

dialog.showOpenDialog(function(file_paths){
  console.info(file_paths)  // => this gives the absolute path of selected files.
})

当触发上述代码时,您可以看到这样的“打开文件对话框”(win/mac/linux的不同视图样式)


这是一种有趣的方法。但当我们启动电子时,我们如何启动这个二进制呢?添加带有
子进程的示例。这是一个有趣的想法。问题是“它将充当后端,并公开一个Electron应用程序将使用的API”。我的解决方案是有一个正在运行的web服务。它不是由Electron应用程序启动的。它甚至可能不在同一台机器上。原始问题中没有任何我认为暗示Electron应用程序必须启动后端的内容。OP表示他需要“运行/打开一个Golang二进制文件的外部文件”。似乎shell.openItem已更改为shell.openPath
const { dialog } = require('electron')
console.log(dialog.showOpenDialog({ properties: ['openFile', 'multiSelections'] }))

dialog.showOpenDialog(function(file_paths){
  console.info(file_paths)  // => this gives the absolute path of selected files.
})