diff options
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, }); }); }); |