lib/common/file/file-metadata.service.ts
Service for managing file metadata, including creation and setting metadata properties.
Methods |
|
Async createFileMetadataEntity | ||||||||||||
createFileMetadataEntity(buf: Buffer, filePath?: string)
|
||||||||||||
Inherited from
FileMd
|
||||||||||||
Defined in
FileMd:45
|
||||||||||||
Creates a FileMetadataEntity for the given buffer and file path.
Parameters :
Returns :
unknown
A promise that resolves to the created FileMetadataEntity. |
Private Async setAudioMd | ||||||||||||
setAudioMd(md: FileMetadataEntity, buf: Buffer)
|
||||||||||||
Defined in lib/common/file/file-metadata.service.ts:139
|
||||||||||||
Sets audio metadata for the given FileMetadataEntity and buffer.
Parameters :
Returns :
any
|
Private setImageMd | ||||||||||||
setImageMd(md: FileMetadataEntity, buf: Buffer)
|
||||||||||||
Defined in lib/common/file/file-metadata.service.ts:166
|
||||||||||||
Sets image metadata for the given FileMetadataEntity and buffer.
Parameters :
Returns :
void
|
Private Async setVideoMd | ||||||||||||
setVideoMd(md: FileMetadataEntity, filePath: string)
|
||||||||||||
Defined in lib/common/file/file-metadata.service.ts:101
|
||||||||||||
Sets video metadata for the given FileMetadataEntity and file path.
Parameters :
Returns :
any
|
Private trimProperties | ||||||||
trimProperties(obj: T)
|
||||||||
Defined in lib/common/file/file-metadata.service.ts:72
|
||||||||
Type parameters :
|
||||||||
Trims properties of an object, removing empty or invalid values.
Parameters :
Returns :
T
The trimmed object. |
import { Injectable } from "@nestjs/common";
import { parseBuffer } from "music-metadata";
import * as ExifReader from "exifreader";
import * as ffprobe from "ffprobe";
import * as ffprobeStatic from "ffprobe-static";
import { FilesUtils } from "../../shared/utils/files.utils";
import { FileMd } from "./file.constants";
import { FileMetadataEntity } from "./entity/file-metadata.entity";
import { AudioFileMetadataEntity } from "./entity/audio-file-metadata.entity";
import { VideoFileMetadataEntity } from "./entity/video-file-metadata.entity";
import { ImageFileMetadataEntity } from "./entity/image-file-metadata.entity";
import { GpsFileMetadataEntity } from "./entity/gps-file-metadata.entity";
import { ExifFileMetadataEntity } from "./entity/exif-file-metadata.entity";
import { IccFileMetadataEntity } from "./entity/icc-file-metadata.entity";
import getHashFromBuffer = FilesUtils.getHashFromBuffer;
import fileType = FilesUtils.fileType;
/**
* Service for managing file metadata, including creation and setting metadata properties.
*/
@Injectable()
export class FileMetadataService extends FileMd {
/**
* Creates a FileMetadataEntity for the given buffer and file path.
* @param buf - Buffer containing the file data.
* @param filePath - Optional file path for the file.
* @returns A promise that resolves to the created FileMetadataEntity.
*/
async createFileMetadataEntity(buf: Buffer, filePath?: string) {
const fileTypeData = await fileType().fileTypeFromBuffer(buf);
const md = new FileMetadataEntity();
md.hash = getHashFromBuffer(buf);
if (fileTypeData) {
md.mime = fileTypeData.mime;
md.ext = fileTypeData.ext;
} else {
return md;
}
try {
if (md.mime.startsWith("image")) {
this.setImageMd(md, buf);
} else if (md.mime.startsWith("audio")) {
await this.setAudioMd(md, buf);
} else if (md.mime.startsWith("video")) {
await this.setVideoMd(md, filePath);
}
} catch (e) {}
return this.trimProperties(md);
}
/**
* Trims properties of an object, removing empty or invalid values.
* @param obj - The object to trim.
* @returns The trimmed object.
*/
private trimProperties<T = any>(obj: T): T {
if (typeof obj === "string") {
return obj.trim() === "" || obj.indexOf("