mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-12 03:01:12 +00:00
fix: 客户端无法保存网络文件的情况
This commit is contained in:
parent
9efdeb6b97
commit
ac46e1ca22
36
electron/electron-menu.js
vendored
36
electron/electron-menu.js
vendored
@ -8,7 +8,7 @@ const {
|
|||||||
} = require('electron')
|
} = require('electron')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const url = require('url')
|
const url = require('url')
|
||||||
const {pipeline} = require('stream')
|
const request = require("request");
|
||||||
|
|
||||||
const MAILTO_PREFIX = "mailto:";
|
const MAILTO_PREFIX = "mailto:";
|
||||||
|
|
||||||
@ -39,6 +39,18 @@ const electronMenu = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
isBlob(url) {
|
||||||
|
return url.startsWith("blob:");
|
||||||
|
},
|
||||||
|
|
||||||
|
isDataUrl(url) {
|
||||||
|
return url.startsWith("data:");
|
||||||
|
},
|
||||||
|
|
||||||
|
isBlobOrDataUrl(url) {
|
||||||
|
return electronMenu.isBlob(url) || electronMenu.isDataUrl(url);
|
||||||
|
},
|
||||||
|
|
||||||
async saveImageAs(url, params) {
|
async saveImageAs(url, params) {
|
||||||
const targetFileName = params.suggestedFilename || params.altText || "image.png";
|
const targetFileName = params.suggestedFilename || params.altText || "image.png";
|
||||||
const {filePath} = await dialog.showSaveDialog({
|
const {filePath} = await dialog.showSaveDialog({
|
||||||
@ -48,13 +60,15 @@ const electronMenu = {
|
|||||||
if (!filePath) return; // user cancelled dialog
|
if (!filePath) return; // user cancelled dialog
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (url.startsWith("data:")) {
|
if (electronMenu.isBlobOrDataUrl(url)) {
|
||||||
await electronMenu.writeNativeImage(filePath, nativeImage.createFromDataURL(url));
|
await electronMenu.writeNativeImage(filePath, nativeImage.createFromDataURL(url));
|
||||||
} else {
|
} else {
|
||||||
const resp = await fetch(url);
|
const writeStream = fs.createWriteStream(filePath)
|
||||||
if (!resp.ok) throw new Error(`unexpected response ${resp.statusText}`);
|
const readStream = request(url)
|
||||||
if (!resp.body) throw new Error(`unexpected response has no body ${resp.statusText}`);
|
readStream.pipe(writeStream);
|
||||||
pipeline(resp.body, fs.createWriteStream(filePath));
|
readStream.on('end', function (response) {
|
||||||
|
writeStream.end();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
await dialog.showMessageBox({
|
await dialog.showMessageBox({
|
||||||
@ -84,7 +98,7 @@ const electronMenu = {
|
|||||||
const url = params.linkURL || params.srcURL;
|
const url = params.linkURL || params.srcURL;
|
||||||
const popupMenu = new Menu();
|
const popupMenu = new Menu();
|
||||||
|
|
||||||
if (!url.startsWith("blob:")) {
|
if (!electronMenu.isBlobOrDataUrl(url)) {
|
||||||
popupMenu.append(
|
popupMenu.append(
|
||||||
new MenuItem({
|
new MenuItem({
|
||||||
label: electronMenu.language.openInBrowser,
|
label: electronMenu.language.openInBrowser,
|
||||||
@ -94,7 +108,10 @@ const electronMenu = {
|
|||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (params.hasImageContents) {
|
if (params.hasImageContents) {
|
||||||
|
if (!electronMenu.isBlob(url)) {
|
||||||
popupMenu.append(
|
popupMenu.append(
|
||||||
new MenuItem({
|
new MenuItem({
|
||||||
label: electronMenu.language.saveImageAs,
|
label: electronMenu.language.saveImageAs,
|
||||||
@ -105,9 +122,6 @@ const electronMenu = {
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (params.hasImageContents) {
|
|
||||||
popupMenu.append(
|
popupMenu.append(
|
||||||
new MenuItem({
|
new MenuItem({
|
||||||
label: electronMenu.language.copyImage,
|
label: electronMenu.language.copyImage,
|
||||||
@ -119,7 +133,7 @@ const electronMenu = {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!url.startsWith("blob:")) {
|
if (!electronMenu.isBlobOrDataUrl(url)) {
|
||||||
if (url.startsWith(MAILTO_PREFIX)) {
|
if (url.startsWith(MAILTO_PREFIX)) {
|
||||||
popupMenu.append(
|
popupMenu.append(
|
||||||
new MenuItem({
|
new MenuItem({
|
||||||
|
|||||||
@ -36,6 +36,7 @@
|
|||||||
"electron-builder": "^23.6.0",
|
"electron-builder": "^23.6.0",
|
||||||
"electron-notarize": "^1.2.2",
|
"electron-notarize": "^1.2.2",
|
||||||
"form-data": "^4.0.0",
|
"form-data": "^4.0.0",
|
||||||
|
"request": "^2.88.2",
|
||||||
"ora": "^4.1.1"
|
"ora": "^4.1.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@ -2454,10 +2454,17 @@ export default {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'imagedown':
|
case 'imagedown':
|
||||||
|
if (this.$Electron) {
|
||||||
|
this.$Electron.sendMessage('saveImageAt', {
|
||||||
|
params: { },
|
||||||
|
url: value,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
this.$store.dispatch('downUrl', {
|
this.$store.dispatch('downUrl', {
|
||||||
url: value,
|
url: value,
|
||||||
token: false
|
token: false
|
||||||
})
|
})
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'filepos':
|
case 'filepos':
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user