Skip to content

Commit 5a2ecb0

Browse files
authored
Merge pull request #12 from sparrowapp-dev/feat/implement-form-data-proxy
feat: implement form data proxy
2 parents d1cfa7e + 6111712 commit 5a2ecb0

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

src/main.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@ import { NestFactory } from '@nestjs/core';
22
import { AppModule } from './app.module';
33
import { WsAdapter } from '@nestjs/platform-ws';
44
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
5+
import * as bodyParser from 'body-parser';
56

67
async function bootstrap() {
78
const app = await NestFactory.create(AppModule);
89
app.useWebSocketAdapter(new WsAdapter(app));
910

11+
// Increase payload size limit
12+
app.use(bodyParser.json({ limit: '50mb' }));
13+
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
14+
1015
/**
1116
* The url endpoint for open api ui
1217
* @type {string}

src/proxy/http/http.service.ts

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ import FormData from 'form-data';
77
export class HttpService {
88
constructor(private readonly httpService: NestHttpService) {}
99

10+
private base64ToBuffer(base64: string): { buffer: Buffer; mime: string } {
11+
const arr = base64.split(',');
12+
const mime = arr[0].match(/:(.*?);/)?.[1];
13+
const bstr = Buffer.from(arr[1], 'base64');
14+
return { buffer: bstr, mime };
15+
}
16+
1017
async makeHttpRequest({
1118
url,
1219
method,
@@ -64,9 +71,7 @@ export class HttpService {
6471
// Filter and transform the body into key-value pairs
6572
const formBody: Record<string, string> = {};
6673
formParsedBody.forEach((item: any) => {
67-
if (item.checked === true) {
6874
formBody[item.key] = item.value;
69-
}
7075
});
7176

7277
const formUrlEncoded = new URLSearchParams(formBody);
@@ -80,13 +85,18 @@ export class HttpService {
8085
const parsedBody =
8186
typeof body === 'string' ? JSON.parse(body) : body;
8287
if (Array.isArray(parsedBody)) {
83-
parsedBody.forEach((item: any) => {
84-
if (item.base) {
85-
formData.append(item.key, fs.createReadStream(item.base));
86-
} else {
87-
formData.append(item.key, item.value);
88+
for (const field of parsedBody || []) {
89+
try{
90+
if (field?.base) {
91+
const { buffer, mime } = this.base64ToBuffer(field.base);
92+
formData.append(field.key, buffer, { filename: field.value, contentType: mime });
93+
}else {
94+
formData.append(field.key, field.value);
95+
}
96+
}catch(e){
97+
formData.append(field.key, field.value);
8898
}
89-
});
99+
}
90100
}
91101

92102
config.data = formData;
@@ -111,7 +121,7 @@ export class HttpService {
111121

112122
// Add custom user agent
113123
config.headers['User-Agent'] = 'SparrowRuntime/1.0.0';
114-
124+
115125
try {
116126
const response = await this.httpService.axiosRef({
117127
url: config.url,

0 commit comments

Comments
 (0)