mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
feat(editor): Add download button for binary data (#2992)
* ✨ Make it possible to download binary data * ⚡ Fix lint issues and add support for filesystem mode * ⚡ Design adjustment
This commit is contained in:
@@ -184,6 +184,7 @@
|
||||
|
||||
<div class="binary-data-show-data-button-wrapper">
|
||||
<n8n-button size="small" :label="$locale.baseText('runData.showBinaryData')" class="binary-data-show-data-button" @click="displayBinaryData(index, key)" />
|
||||
<n8n-button v-if="isDownloadable(index, key)" size="small" type="outline" :label="$locale.baseText('runData.downloadBinaryData')" class="binary-data-show-data-button" @click="downloadBinaryData(index, key)" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -210,6 +211,7 @@
|
||||
import VueJsonPretty from 'vue-json-pretty';
|
||||
import {
|
||||
GenericValue,
|
||||
IBinaryData,
|
||||
IBinaryKeyData,
|
||||
IDataObject,
|
||||
INodeExecutionData,
|
||||
@@ -242,6 +244,8 @@ import { workflowRun } from '@/components/mixins/workflowRun';
|
||||
|
||||
import mixins from 'vue-typed-mixins';
|
||||
|
||||
import { saveAs } from 'file-saver';
|
||||
|
||||
// A path that does not exist so that nothing is selected by default
|
||||
const deselectedPlaceholder = '_!^&*';
|
||||
|
||||
@@ -524,6 +528,24 @@ export default mixins(
|
||||
dataItemClicked (path: string, data: object | number | string) {
|
||||
this.state.value = data;
|
||||
},
|
||||
isDownloadable (index: number, key: string): boolean {
|
||||
const binaryDataItem: IBinaryData = this.binaryData[index][key];
|
||||
return !!(binaryDataItem.mimeType && binaryDataItem.fileName);
|
||||
},
|
||||
async downloadBinaryData (index: number, key: string) {
|
||||
const binaryDataItem: IBinaryData = this.binaryData[index][key];
|
||||
|
||||
let bufferString = 'data:' + binaryDataItem.mimeType + ';base64,';
|
||||
if(binaryDataItem.id) {
|
||||
bufferString += await this.restApi().getBinaryBufferString(binaryDataItem.id);
|
||||
} else {
|
||||
bufferString += binaryDataItem.data;
|
||||
}
|
||||
|
||||
const data = await fetch(bufferString);
|
||||
const blob = await data.blob();
|
||||
saveAs(blob, binaryDataItem.fileName);
|
||||
},
|
||||
displayBinaryData (index: number, key: string) {
|
||||
this.binaryDataDisplayVisible = true;
|
||||
|
||||
@@ -701,7 +723,10 @@ export default mixins(
|
||||
|
||||
.binary-data-show-data-button-wrapper {
|
||||
margin-top: 1.5em;
|
||||
text-align: center;
|
||||
|
||||
button {
|
||||
margin: 0 0.5em 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.label {
|
||||
|
||||
Reference in New Issue
Block a user