diff --git a/src/api/ADempiere/file-management/resource-reference.ts b/src/api/ADempiere/file-management/resource-reference.ts index 8602aaa105..757faebc9d 100644 --- a/src/api/ADempiere/file-management/resource-reference.ts +++ b/src/api/ADempiere/file-management/resource-reference.ts @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - +import { config } from '@/utils/ADempiere/config' // Get Instance for connection import { request } from '@/utils/ADempiere/request' @@ -27,6 +27,42 @@ import { // Utils and Helper Methods import { isEmptyValue } from '@/utils/ADempiere/valueUtils' +/** + * Presigned Url + * @param {string} file_name + */ +export function requestPresignedUrl({ + fileName +}) { + return request({ + url: `${config.adempiere.resource.url}/presigned-url/${fileName}`, + method: 'get', + isWithoutAuthorization: true, + params: { + file_name: fileName + } + }) +} + +/** + * Upload File + * @param {string} url + */ + +export function requestUploadFile({ + url, + file +}) { + return request({ + url: `${url}`, + method: 'put', + isWithoutAuthorization: true, + body: { + file + } + }) +} + /** * Set resource reference * @param {number} resourceId diff --git a/src/components/ADempiere/FieldDefinition/FieldImage.vue b/src/components/ADempiere/FieldDefinition/FieldImage.vue index df26a0747a..95d427302c 100644 --- a/src/components/ADempiere/FieldDefinition/FieldImage.vue +++ b/src/components/ADempiere/FieldDefinition/FieldImage.vue @@ -169,11 +169,12 @@ import { config } from '@/utils/ADempiere/config' import { BEARER_TYPE } from '@/utils/auth' import { MIME_TYPE_IMAGE } from '@/utils/ADempiere/resource/image.ts' import { UUID_PATTERN } from '@/utils/ADempiere/recordUtil' -import { RESOURCE_TYPE_IMAGE } from '@/utils/ADempiere/resource' +// import { RESOURCE_TYPE_IMAGE } from '@/utils/ADempiere/resource' // API Request Methods import { - requestSetResourceReference, + requestPresignedUrl, + // requestSetResourceReference, requestDeleteResourceReference } from '@/api/ADempiere/file-management/resource-reference.ts' @@ -251,7 +252,6 @@ export default { // // height: 200, // // operation: 'resize' // // }) - // console.log(blobImage) // return blobImage.href // }, endPointUploadResource() { @@ -328,34 +328,55 @@ export default { reject(false) return } - requestSetResourceReference({ - resourceType: RESOURCE_TYPE_IMAGE, - id: this.value || -1, - fileName: file.name, - fileSize: file.size - }).then(response => { - if (response.code >= 400) { - reject(response) + requestPresignedUrl({ + fileName: file.name + }) + .then(responseUrl => { + fetch(responseUrl, { + method: 'PUT', + body: file + }).then(() => { + // If multiple files are uploaded, append upload status on the next line. + }).catch((e) => { + console.error(e) + }) + }) + .catch(error => { + showMessage({ + message: error.message || error.result || lang.t('component.attachment.error'), + type: 'error' + }) + reject(error) return - } - - this.fileResource = response - this.additionalData = { - id: response.id - // file_name: response.file_name - } - - this.value = response.resource_id - this.displayedValue = response.file_name - this.preHandleChange(this.value) - resolve(true) - }).catch(error => { - showMessage({ - message: error.message || error.result || lang.t('component.attachment.error'), - type: 'error' }) - reject(error) - }) + // requestSetResourceReference({ + // resourceType: RESOURCE_TYPE_IMAGE, + // id: this.value || -1, + // fileName: file.name, + // fileSize: file.size + // }).then(response => { + // if (response.code >= 400) { + // reject(response) + // return + // } + + // this.fileResource = response + // this.additionalData = { + // id: response.id + // // file_name: response.file_name + // } + + // this.value = response.resource_id + // this.displayedValue = response.file_name + // this.preHandleChange(this.value) + // resolve(true) + // }).catch(error => { + // showMessage({ + // message: error.message || error.result || lang.t('component.attachment.error'), + // type: 'error' + // }) + // reject(error) + // }) }) }, handleChange(file, fileList) { diff --git a/src/components/ADempiere/PanelInfo/Component/AttachmentManager/uploadResource.vue b/src/components/ADempiere/PanelInfo/Component/AttachmentManager/uploadResource.vue index 76190d326a..db39d6f763 100644 --- a/src/components/ADempiere/PanelInfo/Component/AttachmentManager/uploadResource.vue +++ b/src/components/ADempiere/PanelInfo/Component/AttachmentManager/uploadResource.vue @@ -17,54 +17,49 @@ --> diff --git a/src/utils/ADempiere/request.js b/src/utils/ADempiere/request.js index 5b1074e8dc..6cff81516c 100644 --- a/src/utils/ADempiere/request.js +++ b/src/utils/ADempiere/request.js @@ -42,13 +42,15 @@ export function request(requestValues) { if (!isEmptyValue(config.adempiere.api.timeout) && config.adempiere.api.timeout > 0) { requestValues.timeout = config.adempiere.api.timeout } - const token = getToken() let bearerToken = token // Json Web Token if (!isEmptyValue(bearerToken) && !bearerToken.startsWith(BEARER_TYPE)) { bearerToken = `${BEARER_TYPE} ${token}` } + if (requestValues.isWithoutAuthorization) { + bearerToken = undefined + } Object.assign(requestValues, { headers: { Authorization: bearerToken