//附件下载功能
getFileFromUrl(url, fileName) {
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.setRequestHeader("Accept", "image/png");
xhr.responseType = "arraybuffer";
// 加载时处理
xhr.onload = () => {
// 返回结果
resolve(xhr.response);
};
xhr.onerror = (e) => {
reject(e);
};
// 发送
xhr.send();
});
},
window.fs = require("fs");
const {remote} = require("electron");
const electron = require("electron");
const electron_ipcRenderer = electron.ipcRenderer;
let ipc_id = 1;
window.electron_api = {
/**
* 调用主线程接口
* @param {string} method
* @param {any[]} args
*/
call(method, args) {
return new Promise(function (resolve, reject) {
let cb = method + "@" + ipc_id++;
electron_ipcRenderer.once(cb, function (e, err, data) {
if (err) reject(err);
else resolve(data);
});
electron_ipcRenderer.send(method, {cb, args});
});
},
// 窗口最小化
minimize() {
let win = remote.getCurrentWindow();
win.minimize();
},
maximize() {
let win = remote.getCurrentWindow();
win.maximize();
},
};
getPath(name) {
if (is_electron) { //判断是不是electron环境
return electron_api.call("getPath", Array.from(arguments));
}
return Promise.resolve("");
},
dirname(filepath) {
let ss = filepath.split(/\\|\//);
let s = ss.pop();
while (ss.length && !s) s = ss.pop();
return ss.join("/");
},
主代码
getFileFromUrl(url, fileName)
.then(async function (response) {
let fileData = new Uint8Array(response);
var remote = window.electron.remote;
var dialog = remote.dialog;
var mainpath = await hdapi.getPath("main");
var main_path = hdapi.dirname(mainpath);
let filePath;
let typeName = fileName.split(".")[1] ? fileName.split(".")[1] : "VSDX Documents";
let typeExtensions = fileName.split(".")[1] ? fileName.split(".")[1] : "vsdx";
dialog
.showSaveDialog({
defaultPath: main_path + "\\" + fileName,
filters: [{name: typeName, extensions: [typeExtensions]}],
})
.then((results) => {
filePath = results.filePath;
window.fs.writeFileSync(filePath, fileData);
})
.then(() => {
let shell = window.electron.shell;
shell.openPath(filePath);
});
})
.catch((e) => {
console.error(1520, e);
});