From 151ea235f193a9bca2182f52a61d5c6c3303a79c Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Tue, 2 Apr 2024 22:12:09 +0200 Subject: [PATCH] Handle empty attachments --- packages/client/src/utils/buttonActions.js | 13 +++++++++++-- packages/frontend-core/src/api/attachments.js | 3 ++- packages/server/src/api/controllers/row/index.ts | 4 ++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/client/src/utils/buttonActions.js b/packages/client/src/utils/buttonActions.js index 75a4ce99d5..da4dee9655 100644 --- a/packages/client/src/utils/buttonActions.js +++ b/packages/client/src/utils/buttonActions.js @@ -406,7 +406,12 @@ const downloadFileHandler = async action => { const { type } = action.parameters if (type === "attachment") { const { tableId, rowId, attachmentColumn } = action.parameters - const res = await API.downloadAttachment(tableId, rowId, attachmentColumn) + const res = await API.downloadAttachment( + tableId, + rowId, + attachmentColumn, + { suppressErrors: true } + ) await downloadStream(res) return } @@ -429,7 +434,11 @@ const downloadFileHandler = async action => { URL.revokeObjectURL(objectUrl) } catch (e) { console.error(e) - notificationStore.actions.error("File cannot be downloaded") + if (e.status === 404) { + notificationStore.actions.error("File is empty") + } else { + notificationStore.actions.error("File cannot be downloaded") + } } } diff --git a/packages/frontend-core/src/api/attachments.js b/packages/frontend-core/src/api/attachments.js index 597b8f3b10..c2ac5c369c 100644 --- a/packages/frontend-core/src/api/attachments.js +++ b/packages/frontend-core/src/api/attachments.js @@ -95,10 +95,11 @@ export const buildAttachmentEndpoints = API => { * @param rowId * @param columnName the attachments to delete */ - downloadAttachment: async (tableId, rowId, columnName) => { + downloadAttachment: async (tableId, rowId, columnName, options) => { return await API.get({ url: `/api/${tableId}/rows/${rowId}/attachment/${columnName}`, parseResponse: response => response, + suppressErrors: options?.suppressErrors, }) }, } diff --git a/packages/server/src/api/controllers/row/index.ts b/packages/server/src/api/controllers/row/index.ts index 1a0e0ee627..b3634922ce 100644 --- a/packages/server/src/api/controllers/row/index.ts +++ b/packages/server/src/api/controllers/row/index.ts @@ -263,7 +263,8 @@ export async function downloadAttachment(ctx: UserCtx) { const tableId = utils.getTableId(ctx) const row = await pickApi(tableId).find(ctx) - if (!row[columnName]) { + const table = await sdk.tables.getTable(tableId) + if (!table.schema[columnName]) { ctx.throw(400, `'${columnName}' is not valid`) } @@ -293,7 +294,6 @@ export async function downloadAttachment(ctx: UserCtx) { archive.append(attachmentStream, { name: attachment.name }) } - const table = await sdk.tables.getTable(tableId) const displayName = row[table.primaryDisplay || "_id"] ctx.attachment(`${displayName}_${columnName}.zip`) archive.finalize()