@gersur/nest-file-fastify
Version:
fastify-multipart decorators for Nest.js
60 lines • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DiskStorage = void 0;
const os_1 = require("os");
const fs_1 = require("fs");
const promises_1 = require("fs/promises");
const path_1 = require("path");
const fs_2 = require("../fs");
const stream_1 = require("../stream");
const excecuteStorageHandler = (file, req, obj) => {
if (typeof obj === "function") {
return obj(file, req);
}
if (obj != null)
return obj;
return null;
};
const ENV_TESTS_STORAGE_TMP_PATH = process.env.__TESTS_TMP_PATH__;
class DiskStorage {
constructor(options) {
this.options = options;
if (ENV_TESTS_STORAGE_TMP_PATH != null) {
this.options = { ...this.options, dest: ENV_TESTS_STORAGE_TMP_PATH };
}
}
async handleFile(file, req) {
const filename = await this.getFilename(file, req, this.options?.filename);
const dest = await this.getFileDestination(file, req, this.options?.dest);
if (!(await (0, fs_2.pathExists)(dest))) {
await (0, promises_1.mkdir)(dest, { recursive: true });
}
const path = (0, path_1.join)(dest, filename);
const stream = (0, fs_1.createWriteStream)(path);
await (0, stream_1.pump)(file.file, stream);
const { encoding, fieldname, mimetype } = file;
return {
size: stream.bytesWritten,
dest,
filename,
originalFilename: file.filename,
path,
mimetype,
encoding,
fieldname,
};
}
async removeFile(file, force) {
if (!this.options?.removeAfter && !force)
return;
await (0, promises_1.unlink)(file.path);
}
async getFilename(file, req, obj) {
return (excecuteStorageHandler(file, req, obj) ?? (0, fs_2.getUniqueFilename)(file.filename));
}
async getFileDestination(file, req, obj) {
return excecuteStorageHandler(file, req, obj) ?? (0, os_1.tmpdir)();
}
}
exports.DiskStorage = DiskStorage;
//# sourceMappingURL=disk-storage.js.map