Browse Source

fix: asynchronous local file write

Signed-off-by: mertmit <mertmit99@gmail.com>
pull/5031/head
mertmit 2 years ago
parent
commit
22c4d1739d
  1. 17
      packages/nocodb/src/lib/v1-legacy/plugins/adapters/storage/Local.ts

17
packages/nocodb/src/lib/v1-legacy/plugins/adapters/storage/Local.ts

@ -1,5 +1,6 @@
import fs from 'fs'; import fs from 'fs';
import path from 'path'; import path from 'path';
import { promisify } from 'util';
import mkdirp from 'mkdirp'; import mkdirp from 'mkdirp';
@ -8,16 +9,20 @@ import NcConfigFactory from '../../../../utils/NcConfigFactory';
import axios from 'axios'; import axios from 'axios';
const writeFileAsync = promisify(fs.writeFile)
const readFileAsync = promisify(fs.readFile)
const unlinkAsync = promisify(fs.unlink)
export default class Local implements IStorageAdapterV2 { export default class Local implements IStorageAdapterV2 {
constructor() {} constructor() {}
public async fileCreate(key: string, file: XcFile): Promise<any> { public async fileCreate(key: string, file: XcFile): Promise<any> {
const destPath = path.join(NcConfigFactory.getToolDir(), ...key.split('/')); const destPath = path.join(NcConfigFactory.getToolDir(), ...key.split('/'));
try { try {
mkdirp.sync(path.dirname(destPath)); await mkdirp(path.dirname(destPath));
const data = await fs.readFileSync(file.path); const data = await readFileAsync(file.path)
await fs.writeFileSync(destPath, data); await writeFileAsync(destPath, data);
fs.unlinkSync(file.path); await unlinkAsync(file.path);
// await fs.promises.rename(file.path, destPath); // await fs.promises.rename(file.path, destPath);
} catch (e) { } catch (e) {
throw e; throw e;
@ -41,8 +46,8 @@ export default class Local implements IStorageAdapterV2 {
origin: 'https://www.airtable.com/', origin: 'https://www.airtable.com/',
}, },
}) })
.then((response) => { .then(async (response) => {
mkdirp.sync(path.dirname(destPath)); await mkdirp(path.dirname(destPath));
const file = fs.createWriteStream(destPath); const file = fs.createWriteStream(destPath);
// close() is async, call cb after close completes // close() is async, call cb after close completes
file.on('finish', () => { file.on('finish', () => {

Loading…
Cancel
Save