Files
โ
This documentation is deprecated!
The core_attachemnts
is responsible for upload files to the system.
File system will save your files in public
folder.
Basic usage
As an example, we will upload a file for a avatar user.
Arguments (DTO)
File: upload/dto/upload-avatar-core_members.args.ts
import { ArgsType, Field } from "@nestjs/graphql";
import { FileUpload } from "@/utils/graphql-upload/Upload";
import { GraphQLUpload } from "@/utils/graphql-upload/GraphQLUpload";
@ArgsType()
export class UploadAvatarCoreMembersArgs {
@Field(() => GraphQLUpload)
file: Promise<FileUpload>;
}
Resolver
File: upload/upload-avatar-core_members.resolver.ts
In this example, we will use the @CurrentUser()
decorator to get the user data.
import { Args, Mutation, Resolver } from "@nestjs/graphql";
import { UseGuards } from "@nestjs/common";
import { UploadAvatarCoreMembersService } from "./upload-avatar-core_members.service";
import { UploadAvatarCoreMembersArgs } from "./dto/upload-avatar-core_members.args";
import { User, CurrentUser } from "@/utils/decorators/user.decorator";
import { AuthGuards } from "@/utils/guards/auth.guards";
@Resolver()
export class UploadAvatarCoreMembersResolver {
constructor(private readonly service: UploadAvatarCoreMembersService) {}
@Mutation(() => String)
@UseGuards(AuthGuards)
async core_members__avatar__upload(
@CurrentUser() currentUser: User,
@Args() args: UploadAvatarCoreMembersArgs
): Promise<string> {
return await this.service.uploadAvatar(currentUser, args);
}
}
Upload service
To upload files to the system, we will use the UploadCoreAttachmentsService
service.
await this.attachments.upload({
files: [
{
file,
description: "Avatar",
position: 0
}
],
maxUploadSizeBytes: 1e6, // 1MB
acceptMimeType: ["image/png", "image/jpeg"],
module: "core_members",
module_id: id
});
Arguments for the upload
method:
Args | Description |
---|---|
files | Array of files to upload. If you want to upload multiple files, just add more objects to the array. |
file : File to upload. | |
position : File position. | |
description? : File description (optional). If you don't set this value, the system will automatically set the description based on the file name. | |
maxUploadSizeBytes | Maximum file size in bytes. |
acceptMimeType | Array of accepted mime types. |
module | Module name. In this example, we will use core_members . |
module_id | Module ID. In this example, we will use the user ID. |
Returns value
The upload
method returns a Promise<UploadCoreAttachmentsObj>
.
@ObjectType()
export class UploadCoreAttachmentsObj {
@Field(() => String)
module: string;
@Field(() => String)
module_id: string;
@Field(() => String)
name: string;
@Field(() => String)
mimetype: string;
@Field(() => String)
path: string;
@Field(() => Int)
created: number;
@Field(() => Int)
position: number;
@Field(() => String, { nullable: true })
description: string | null;
@Field(() => String)
extension: string;
@Field(() => Int)
file_size: number;
@Field(() => String)
user_id: string;
}
Full code for Service
File: upload/upload-avatar-core_members.service.ts
import { Injectable } from "@nestjs/common";
import { UploadAvatarCoreMembersArgs } from "./dto/upload-avatar-core_members.args";
import { UploadCoreAttachmentsService } from "@/src/apps/core/attachments/upload/upload-core_attachments.service";
import { User } from "@/utils/decorators/user.decorator";
@Injectable()
export class UploadAvatarCoreMembersService {
constructor(private readonly attachments: UploadCoreAttachmentsService) {}
async uploadAvatar(
{ id }: User,
{ file }: UploadAvatarCoreMembersArgs
): Promise<string> {
await this.attachments.upload({
files: [
{
file,
description: "Avatar",
position: 0
}
],
maxUploadSizeBytes: 1e6, // 1MB
acceptMimeType: ["image/png", "image/jpeg"],
module: "core_members",
module_id: id
});
return "Success!";
}
}