Commit 30a316c9 authored by nanahira's avatar nanahira

formidable

parent bd8f0bb2
Pipeline #2278 passed with stages
in 2 minutes and 22 seconds
......@@ -34,6 +34,7 @@ lerna-debug.log*
!.vscode/extensions.json
/ygopro-database
/upload
.git*
Dockerfile
......
......@@ -33,4 +33,5 @@ lerna-debug.log*
!.vscode/launch.json
!.vscode/extensions.json
/ygopro-database
\ No newline at end of file
/ygopro-database
/upload
\ No newline at end of file
......@@ -1130,6 +1130,14 @@
"@types/range-parser": "*"
}
},
"@types/formidable": {
"version": "1.0.32",
"resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-1.0.32.tgz",
"integrity": "sha512-jOAB5+GFW+C+2xdvUcpd/CnYg2rD5xCyagJLBJU+9PB4a/DKmsAqS9yZI3j/Q9zwvM7ztPHaAIH1ijzp4cezdQ==",
"requires": {
"@types/node": "*"
}
},
"@types/graceful-fs": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz",
......@@ -3713,8 +3721,7 @@
"formidable": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
"integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==",
"dev": true
"integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q=="
},
"forwarded": {
"version": "0.1.2",
......
import { Body, Controller, Get, Post, Query, Res } from '@nestjs/common';
import {
Body,
Controller,
Get,
Param,
Post,
Query,
Req,
Res,
UploadedFiles,
UseInterceptors,
} from '@nestjs/common';
import express from 'express';
import { AppService } from './app.service';
import { UserInfo } from './entities/mycard/UserInfo';
import { config } from './config';
import {
AnyFilesInterceptor,
FilesInterceptor,
} from '@nestjs/platform-express';
import { IncomingForm } from 'formidable';
@Controller('api')
export class AppController {
......@@ -85,4 +101,39 @@ export class AppController {
const code = await this.appService.submitVote(body);
res.status(code).json({ code });
}
@Post('upload')
uploadFile(@Req() req: express.Request, @Res() res: express.Response) {
const form = new IncomingForm();
form.encoding = 'utf-8';
form.uploadDir = 'upload/';
form.keepExtensions = true;
form.maxFieldsSize = 2 * 1024 * 1024;
form.parse(req, function (err, fields, files) {
if (err) {
console.log(err);
return res.status(500).send('upload image fail!');
}
const response: any = {};
if (err) {
response.code = 500;
} else {
response.code = 200;
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
response.path = files.file.path;
}
res.json(response);
});
}
@Get('download/:id')
downloadFile(@Param('id') filename: string, @Res() res: express.Response) {
if (!filename) {
res.status(400).end('Missing filename.');
}
const filepath = `upload/${filename}`;
res.download(filepath, filename);
}
}
......@@ -18,6 +18,7 @@ import qs from 'qs';
import { EloUtility } from './EloUtility';
import { Votes } from './entities/mycard/Votes';
import { VoteResult } from './entities/mycard/VoteResult';
import { promises as fs } from 'fs';
const attrOffset = 1010;
const raceOffset = 1020;
......@@ -90,6 +91,15 @@ export class AppService {
this.chineseDirtyFilter = new Filter({
chineseList: ChineseDirtyWords,
});
this.createUploadDirectory();
}
private async createUploadDirectory() {
try {
await fs.access('./upload');
} catch (e) {
await fs.mkdir('./upload');
}
}
private async transaction(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment