Skip to content

File Upload with dynamic path #6744

@rajkaran

Description

@rajkaran

I have copied code from file-transfer example which is working fine. I want to send path with file from client side.

below is my fileupload

export class FileUploadController {
	constructor(
		@inject(FileUploadBindings.FILE_UPLOAD_SERVICE) private handler: FileUploadHandler,
	) { }

	post('/file-uploads', {
		responses: {
			200: {
				content: {
					'application/json': {
						schema: {
							type: 'object',
						},
					},
				},
				description: 'Files and fields',
			},
		},
	})
	async fileUpload(
		@requestBody.file() request: Request,
		@inject(RestBindings.Http.RESPONSE) response: Response,
	): Promise<object> {
		return new Promise<object>((resolve, reject) => {

			console.log('request body before actual upload', request.body);

			this.handler(request, response, (err: unknown) => {
				if (err) reject(err);
				else {
					console.log('request body after upload', request.body);
					resolve(FileUploadController.getFilesAndFields(request));
				}
			});
		});
	}

	/**
	 * Get files and fields for the request
	 * @param request - Http request
	 */
	private static getFilesAndFields(request: Request) {
		const uploadedFiles = request.files;

		console.log('request.files', request.files);

		const mapper = (f: globalThis.Express.Multer.File) => ({
			fieldname: f.fieldname,
			originalname: f.originalname,
			encoding: f.encoding,
			mimetype: f.mimetype,
			size: f.size,
		});

		let files: object[] = [];

		if (Array.isArray(uploadedFiles)) {
			files = uploadedFiles.map(mapper);
		} else {
			for (const filename in uploadedFiles) {
				files.push(...uploadedFiles[filename].map(mapper));
			}
		}

		return { files, fields: request.body };
	}
}

How can I get fields submitted with file so I can modify fileName and path. request.body before calling this handler is undefined.

Metadata

Metadata

Assignees

No one assigned

    Labels

    RESTIssues related to @loopback/rest package and REST transport in general

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions