Skip to content

Commit ecd61e3

Browse files
feature(@nestjs/common) add field name to the @uploadedfile() decorator
1 parent 10eeac9 commit ecd61e3

6 files changed

Lines changed: 18 additions & 15 deletions

File tree

packages/common/decorators/http/route-params.decorator.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import 'reflect-metadata';
22
import { ROUTE_ARGS_METADATA } from '../../constants';
33
import { RouteParamtypes } from '../../enums/route-paramtypes.enum';
44
import { PipeTransform } from '../../index';
5-
import { isNil, isString } from '../../utils/shared.utils';
65
import { Type } from '../../interfaces';
6+
import { isNil, isString } from '../../utils/shared.utils';
77

88
export type ParamData = object | string | number;
99
export interface RouteParamsMetadata {
@@ -71,7 +71,7 @@ export const Next: () => ParameterDecorator = createRouteParamDecorator(
7171
export const Session: () => ParameterDecorator = createRouteParamDecorator(
7272
RouteParamtypes.SESSION,
7373
);
74-
export const UploadedFile: () => ParameterDecorator = createRouteParamDecorator(
74+
export const UploadedFile: (fileKey?: string) => ParameterDecorator = createRouteParamDecorator(
7575
RouteParamtypes.FILE,
7676
);
7777
export const UploadedFiles: () => ParameterDecorator = createRouteParamDecorator(

packages/common/interceptors/file-fields.interceptor.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import * as multer from 'multer';
2-
import { NestInterceptor } from './../interfaces/features/nest-interceptor.interface';
32
import { Observable } from 'rxjs';
4-
import { MulterOptions } from '../interfaces/external/multer-options.interface';
5-
import { transformException } from './multer/multer.utils';
63
import { ExecutionContext } from '../interfaces';
4+
import { MulterField, MulterOptions } from '../interfaces/external/multer-options.interface';
5+
import { NestInterceptor } from './../interfaces/features/nest-interceptor.interface';
6+
import { transformException } from './multer/multer.utils';
77

88
export function FileFieldsInterceptor(
9-
uploadFields: multer.Field[],
10-
options?: MulterOptions
9+
uploadFields: MulterField[],
10+
options?: MulterOptions,
1111
) {
1212
const Interceptor = class implements NestInterceptor {
1313
readonly upload = multer(options);
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
export * from './file-fields.interceptor';
12
export * from './file.interceptor';
23
export * from './files.interceptor';

packages/common/interceptors/multer/multer.utils.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
import {
2-
InternalServerErrorException,
3-
HttpException,
4-
PayloadTooLargeException,
5-
BadRequestException,
6-
} from './../../exceptions';
1+
import { BadRequestException, HttpException, PayloadTooLargeException } from './../../exceptions';
72
import { multerExceptions } from './multer.constants';
83

94
export function transformException(error: Error | undefined) {

packages/common/interfaces/external/multer-options.interface.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,10 @@ export interface MulterOptions {
5252
callback: (error: Error | null, acceptFile: boolean) => void,
5353
): void;
5454
}
55+
56+
export interface MulterField {
57+
/** The field name. */
58+
name: string;
59+
/** Optional maximum number of files per field to accept. */
60+
maxCount?: number;
61+
}

packages/core/router/route-params-factory.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { IRouteParamsFactory } from './interfaces/route-params-factory.interface
44
export class RouteParamsFactory implements IRouteParamsFactory {
55
public exchangeKeyForValue(
66
key: RouteParamtypes | string,
7-
data,
7+
data: string | object | any,
88
{ req, res, next },
99
) {
1010
switch (key) {
@@ -25,7 +25,7 @@ export class RouteParamsFactory implements IRouteParamsFactory {
2525
case RouteParamtypes.SESSION:
2626
return req.session;
2727
case RouteParamtypes.FILE:
28-
return req.file;
28+
return req[data || 'file'];
2929
case RouteParamtypes.FILES:
3030
return req.files;
3131
default:

0 commit comments

Comments
 (0)