import { Controller, Get, Post, Res, Param, Req, Header } from '@nestjs/common';
import { fsRoot } from './server-config';
import { createReadStream } from 'fs';
import { join } from 'path';
import url = require('url');
@Controller()
export class AppController {
@Get('/upload/:fileId')
async serveAvatar(@Param('fileId') fileId, @Res() res): Promise<any> {
return res.sendFile(fileId, { root: 'upload' });
}
// serve all nested folder
// @Get('/upload/*')
// async serveAvatar(@Req() req, @Res() res): Promise<any> {
// const urlObject = url.parse(req.url, true);
// const filePath = decodeURI(urlObject.path).replace('/api/upload/', '');
// return res.sendFile(filePath , { root: 'upload' });
// }
@Get('/test')
//@Header('Content-Type', 'application/pdf')
getTest(@Res() response) {
const url = join(fsRoot(), '/upload/test.pdf');
const data = createReadStream(url);
response.setHeader('Content-Type', 'application/pdf');
response.setHeader('Content-Disposition', 'attachment; filename=another.pdf');
data.pipe(response);
}
}
// Create upload folder on your project root dir
// If you set app.setGlobalPrefix("api");
// image is serve on http://localhost:3000/api/upload/a.png
// pdf file is serve on http://localhost:3000/api/upload/test.pdf
// **************** server-config.ts Code ****************************
import path = require('path');
export const fsRoot = () => {
return path.resolve(__dirname, '../');
};
No comments:
Post a Comment