Use blob URL for Tesseract to avoid CORS issues (#11964)

This commit is contained in:
ThibG 2019-09-27 02:16:11 +02:00 committed by Eugen Rochko
parent f31530b74d
commit 7baedcb61e
3 changed files with 17 additions and 6 deletions

View file

@ -234,7 +234,7 @@ export function uploadCompose(files) {
progress[i] = loaded; progress[i] = loaded;
dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total)); dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total));
}, },
}).then(({ data }) => dispatch(uploadComposeSuccess(data))); }).then(({ data }) => dispatch(uploadComposeSuccess(data, f)));
}).catch(error => dispatch(uploadComposeFail(error))); }).catch(error => dispatch(uploadComposeFail(error)));
}; };
}; };
@ -289,10 +289,11 @@ export function uploadComposeProgress(loaded, total) {
}; };
}; };
export function uploadComposeSuccess(media) { export function uploadComposeSuccess(media, file) {
return { return {
type: COMPOSE_UPLOAD_SUCCESS, type: COMPOSE_UPLOAD_SUCCESS,
media: media, media: media,
file: file,
skipLoading: true, skipLoading: true,
}; };
}; };

View file

@ -173,7 +173,17 @@ class FocalPointModal extends ImmutablePureComponent {
langPath: `${assetHost}/ocr/lang-data`, langPath: `${assetHost}/ocr/lang-data`,
}); });
worker.recognize(media.get('url')) let media_url = media.get('file');
if (window.URL && URL.createObjectURL) {
try {
media_url = URL.createObjectURL(media.get('file'));
} catch (error) {
console.error(error);
}
}
worker.recognize(media_url)
.progress(({ progress }) => this.setState({ progress })) .progress(({ progress }) => this.setState({ progress }))
.finally(() => worker.terminate()) .finally(() => worker.terminate())
.then(({ text }) => this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false })) .then(({ text }) => this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false }))

View file

@ -103,11 +103,11 @@ function clearAll(state) {
}); });
}; };
function appendMedia(state, media) { function appendMedia(state, media, file) {
const prevSize = state.get('media_attachments').size; const prevSize = state.get('media_attachments').size;
return state.withMutations(map => { return state.withMutations(map => {
map.update('media_attachments', list => list.push(media)); map.update('media_attachments', list => list.push(media.set('file', file)));
map.set('is_uploading', false); map.set('is_uploading', false);
map.set('resetFileKey', Math.floor((Math.random() * 0x10000))); map.set('resetFileKey', Math.floor((Math.random() * 0x10000)));
map.set('idempotencyKey', uuid()); map.set('idempotencyKey', uuid());
@ -321,7 +321,7 @@ export default function compose(state = initialState, action) {
case COMPOSE_UPLOAD_REQUEST: case COMPOSE_UPLOAD_REQUEST:
return state.set('is_uploading', true); return state.set('is_uploading', true);
case COMPOSE_UPLOAD_SUCCESS: case COMPOSE_UPLOAD_SUCCESS:
return appendMedia(state, fromJS(action.media)); return appendMedia(state, fromJS(action.media), action.file);
case COMPOSE_UPLOAD_FAIL: case COMPOSE_UPLOAD_FAIL:
return state.set('is_uploading', false); return state.set('is_uploading', false);
case COMPOSE_UPLOAD_UNDO: case COMPOSE_UPLOAD_UNDO: