Download / Import buttons polute HTML body
### Expected Behavior

We should delete the create <a download> link after the click was done:
![image](https://github.com/kestra-io/kestra/assets/37618489/6ed611a4-be11-4b21-a626-041c0e2cc377)


### Actual Behaviour

_No response_

### Steps To Reproduce

_No response_

### Environment Information

- Kestra Version:
- Operating System (OS / Docker / Kubernetes):
- Java Version (If not docker):


### Example flow

_No response_
ui/src/components/executions/Logs.vue ui/src/components/executions/TaskRunLine.vue
ui/src/components/executions/Logs.vue ui/src/components/executions/TaskRunLine.vue
diff --git a/ui/src/components/executions/Logs.vue b/ui/src/components/executions/Logs.vue
index f6195855c7..92fff95b3f 100644
--- a/ui/src/components/executions/Logs.vue
+++ b/ui/src/components/executions/Logs.vue
@@ -57,6 +57,7 @@
     import LogLevelSelector from "../logs/LogLevelSelector.vue";
     import Collapse from "../layout/Collapse.vue";
     import State from "../../utils/state";
+    import Utils from "../../utils/utils";
 
     export default {
         components: {
@@ -100,12 +101,7 @@
                         minLevel: this.level
                     }
                 }).then((response) => {
-                    const url = window.URL.createObjectURL(new Blob([response]));
-                    const link = document.createElement("a");
-                    link.href = url;
-                    link.setAttribute("download", this.downloadName);
-                    document.body.appendChild(link);
-                    link.click();
+                    Utils.downloadUrl(window.URL.createObjectURL(new Blob([response])), this.downloadName);
                 });
             },
             forwardEvent(type, event) {
diff --git a/ui/src/components/executions/TaskRunLine.vue b/ui/src/components/executions/TaskRunLine.vue
index f2baf577d3..bf2c8ae149 100644
--- a/ui/src/components/executions/TaskRunLine.vue
+++ b/ui/src/components/executions/TaskRunLine.vue
@@ -150,6 +150,7 @@
     import _groupBy from "lodash/groupBy";
     import TaskIcon from "@kestra-io/ui-libs/src/components/misc/TaskIcon.vue";
     import Duration from "../layout/Duration.vue";
+    import Utils from "../../utils/utils";
 
     export default {
         components: {
@@ -258,12 +259,7 @@
                     executionId: this.followedExecution.id,
                     params: {...params, taskRunId: currentTaskRunId}
                 }).then((response) => {
-                    const url = window.URL.createObjectURL(new Blob([response]));
-                    const link = document.createElement("a");
-                    link.href = url;
-                    link.setAttribute("download", this.downloadName(currentTaskRunId));
-                    document.body.appendChild(link);
-                    link.click();
+                    Utils.downloadUrl(window.URL.createObjectURL(new Blob([response])), this.downloadName(currentTaskRunId));
                 });
             },
             forwardEvent(type, event) {
