mirror of https://github.com/nocodb/nocodb
Pranav C
2 years ago
1 changed files with 56 additions and 2 deletions
@ -1,4 +1,58 @@
|
||||
import { Controller } from '@nestjs/common'; |
||||
import { Controller, Get, Request, Response } from '@nestjs/common'; |
||||
import { getViewAndModelFromRequestByAliasOrId } from '../../../../../nocodb/src/lib/controllers/dbData/helpers'; |
||||
import { Acl } from '../../../middlewares/extract-project-id/extract-project-id.middleware'; |
||||
import { View } from '../../../models'; |
||||
import { extractCsvData, extractXlsxData } from '../helpers'; |
||||
import * as XLSX from 'xlsx'; |
||||
|
||||
@Controller('data-alias-export') |
||||
export class DataAliasExportController {} |
||||
export class DataAliasExportController { |
||||
@Get([ |
||||
'/api/v1/db/data/:orgs/:projectName/:tableName/export/excel', |
||||
'/api/v1/db/data/:orgs/:projectName/:tableName/views/:viewName/export/excel', |
||||
]) |
||||
@Acl('exportExcel') |
||||
async excelDataExport(@Request() req, @Response() res) { |
||||
const { model, view } = await getViewAndModelFromRequestByAliasOrId(req); |
||||
let targetView = view; |
||||
if (!targetView) { |
||||
targetView = await View.getDefaultView(model.id); |
||||
} |
||||
const { offset, elapsed, data } = await extractXlsxData(targetView, req); |
||||
const wb = XLSX.utils.book_new(); |
||||
XLSX.utils.book_append_sheet(wb, data, targetView.title); |
||||
const buf = XLSX.write(wb, { type: 'base64', bookType: 'xlsx' }); |
||||
res.set({ |
||||
'Access-Control-Expose-Headers': 'nc-export-offset', |
||||
'nc-export-offset': offset, |
||||
'nc-export-elapsed-time': elapsed, |
||||
'Content-Disposition': `attachment; filename="${encodeURI( |
||||
targetView.title, |
||||
)}-export.xlsx"`,
|
||||
}); |
||||
res.end(buf); |
||||
} |
||||
@Get([ |
||||
'/api/v1/db/data/:orgs/:projectName/:tableName/views/:viewName/export/csv', |
||||
'/api/v1/db/data/:orgs/:projectName/:tableName/export/csv', |
||||
]) |
||||
@Acl('exportCsv') |
||||
async csvDataExport(@Request() req, @Response() res) { |
||||
const { model, view } = await getViewAndModelFromRequestByAliasOrId(req); |
||||
let targetView = view; |
||||
if (!targetView) { |
||||
targetView = await View.getDefaultView(model.id); |
||||
} |
||||
const { offset, elapsed, data } = await extractCsvData(targetView, req); |
||||
|
||||
res.set({ |
||||
'Access-Control-Expose-Headers': 'nc-export-offset', |
||||
'nc-export-offset': offset, |
||||
'nc-export-elapsed-time': elapsed, |
||||
'Content-Disposition': `attachment; filename="${encodeURI( |
||||
targetView.title, |
||||
)}-export.csv"`,
|
||||
}); |
||||
res.send(data); |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue