summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/ide/components/new_dropdown/upload.vue20
-rw-r--r--changelogs/unreleased/48746-fix-files-uploaded-in-base64.yml6
-rw-r--r--spec/javascripts/ide/components/new_dropdown/upload_spec.js32
3 files changed, 13 insertions, 45 deletions
diff --git a/app/assets/javascripts/ide/components/new_dropdown/upload.vue b/app/assets/javascripts/ide/components/new_dropdown/upload.vue
index e2be805ed22..e750e6dab22 100644
--- a/app/assets/javascripts/ide/components/new_dropdown/upload.vue
+++ b/app/assets/javascripts/ide/components/new_dropdown/upload.vue
@@ -25,33 +25,21 @@ export default {
},
},
methods: {
- createFile(target, file, isText) {
+ createFile(target, file) {
const { name } = file;
- let { result } = target;
-
- if (!isText) {
- // eslint-disable-next-line prefer-destructuring
- result = result.split('base64,')[1];
- }
+ const { result } = target;
this.$emit('create', {
name: `${this.path ? `${this.path}/` : ''}${name}`,
type: 'blob',
content: result,
- base64: !isText,
});
},
readFile(file) {
const reader = new FileReader();
- const isText = file.type.match(/text.*/) !== null;
-
- reader.addEventListener('load', e => this.createFile(e.target, file, isText), { once: true });
- if (isText) {
- reader.readAsText(file);
- } else {
- reader.readAsDataURL(file);
- }
+ reader.addEventListener('load', e => this.createFile(e.target, file), { once: true });
+ reader.readAsBinaryString(file);
},
openFile() {
Array.from(this.$refs.fileUpload.files).forEach(file => this.readFile(file));
diff --git a/changelogs/unreleased/48746-fix-files-uploaded-in-base64.yml b/changelogs/unreleased/48746-fix-files-uploaded-in-base64.yml
new file mode 100644
index 00000000000..b4ec6b2435e
--- /dev/null
+++ b/changelogs/unreleased/48746-fix-files-uploaded-in-base64.yml
@@ -0,0 +1,6 @@
+---
+title: Fix issue where files were base64 encoded after uploading non-text files from
+ the WebIDE.
+merge_request: 22252
+author:
+type: fixed
diff --git a/spec/javascripts/ide/components/new_dropdown/upload_spec.js b/spec/javascripts/ide/components/new_dropdown/upload_spec.js
index 70b885ede26..50e7f3c3170 100644
--- a/spec/javascripts/ide/components/new_dropdown/upload_spec.js
+++ b/spec/javascripts/ide/components/new_dropdown/upload_spec.js
@@ -40,28 +40,17 @@ describe('new dropdown upload', () => {
describe('readFile', () => {
beforeEach(() => {
- spyOn(FileReader.prototype, 'readAsText');
- spyOn(FileReader.prototype, 'readAsDataURL');
+ spyOn(FileReader.prototype, 'readAsBinaryString');
});
- it('calls readAsText for text files', () => {
+ it('calls readAsBinaryString for all files', () => {
const file = {
type: 'text/html',
};
vm.readFile(file);
- expect(FileReader.prototype.readAsText).toHaveBeenCalledWith(file);
- });
-
- it('calls readAsDataURL for non-text files', () => {
- const file = {
- type: 'images/png',
- };
-
- vm.readFile(file);
-
- expect(FileReader.prototype.readAsDataURL).toHaveBeenCalledWith(file);
+ expect(FileReader.prototype.readAsBinaryString).toHaveBeenCalledWith(file);
});
});
@@ -69,9 +58,6 @@ describe('new dropdown upload', () => {
const target = {
result: 'content',
};
- const binaryTarget = {
- result: 'base64,base64content',
- };
const file = {
name: 'file',
};
@@ -83,18 +69,6 @@ describe('new dropdown upload', () => {
name: file.name,
type: 'blob',
content: target.result,
- base64: false,
- });
- });
-
- it('splits content on base64 if binary', () => {
- vm.createFile(binaryTarget, file, false);
-
- expect(vm.$emit).toHaveBeenCalledWith('create', {
- name: file.name,
- type: 'blob',
- content: binaryTarget.result.split('base64,')[1],
- base64: true,
});
});
});