В Electron есть возможность организовать DnD из приложения на рабочий стол, есть даже пример в оф. доке -
https://www.electronjs.org/docs/latest/tutorial/na...
По сути в main процессе вы слушаете событие (ipc канал от рендер процесса), а после выполняете запрос к вашему файловому хранилищу и формируете файл локально, уже туда, куда вы его утянул (в какую папку
ipcMain.on('drag-and-drop', async (event, { url, filename }) => {
try {
const response = await axios({
url,
method: 'GET',
responseType: 'stream'
});
const filePath = join(app.getPath('desktop'), filename);
const writer = fs.createWriteStream(filePath);
response.data.pipe(writer);
return new Promise((resolve, reject) => {
writer.on('finish', resolve);
writer.on('error', reject);
});
} catch (error) {
await dialog.showMessageBox(null, {
type: 'error',
defaultId: 2,
title: 'Ошибка при скачивании файла',
message: 'Не удалось скачать файл',
});
throw error;
}
});