@midwayjs/upload 3.6.0 → 3.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/middleware.d.ts +2 -1
- package/dist/middleware.js +23 -8
- package/dist/parse.js +1 -5
- package/package.json +2 -2
package/dist/middleware.d.ts
CHANGED
|
@@ -3,11 +3,12 @@ import { UploadOptions } from '.';
|
|
|
3
3
|
export declare class UploadMiddleware implements IMiddleware<any, any> {
|
|
4
4
|
upload: UploadOptions;
|
|
5
5
|
logger: IMidwayLogger;
|
|
6
|
+
private uploadWhiteListMap;
|
|
6
7
|
resolve(app: any): (req: any, res: any, next: any) => Promise<any>;
|
|
7
8
|
execUpload(ctx: any, req: any, res: any, next: any, isExpress: any): Promise<any>;
|
|
8
9
|
getUploadBoundary(request: any): false | string;
|
|
9
10
|
isReadableStream(req: any, isExpress: any): boolean;
|
|
10
|
-
checkExt(filename: any): boolean;
|
|
11
|
+
checkExt(filename: any): string | boolean;
|
|
11
12
|
static getName(): string;
|
|
12
13
|
}
|
|
13
14
|
//# sourceMappingURL=middleware.d.ts.map
|
package/dist/middleware.js
CHANGED
|
@@ -19,7 +19,15 @@ const parse_1 = require("./parse");
|
|
|
19
19
|
const getRawBody = require("raw-body");
|
|
20
20
|
const { unlink, writeFile } = fs_1.promises;
|
|
21
21
|
let UploadMiddleware = class UploadMiddleware {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.uploadWhiteListMap = {};
|
|
24
|
+
}
|
|
22
25
|
resolve(app) {
|
|
26
|
+
if (Array.isArray(this.upload.whitelist)) {
|
|
27
|
+
for (const whiteExt of this.upload.whitelist) {
|
|
28
|
+
this.uploadWhiteListMap[whiteExt] = true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
23
31
|
if (app.getFrameworkType() === core_1.MidwayFrameworkType.WEB_EXPRESS) {
|
|
24
32
|
return async (req, res, next) => {
|
|
25
33
|
return this.execUpload(req, req, res, next, true);
|
|
@@ -64,10 +72,12 @@ let UploadMiddleware = class UploadMiddleware {
|
|
|
64
72
|
if (this.isReadableStream(req, isExpress)) {
|
|
65
73
|
if (mode === 'stream') {
|
|
66
74
|
const { fields, fileInfo } = await (0, parse_1.parseFromReadableStream)(req, boundary);
|
|
67
|
-
|
|
75
|
+
const ext = this.checkExt(fileInfo.filename);
|
|
76
|
+
if (!ext) {
|
|
68
77
|
throw new _1.MultipartInvalidFilenameError(fileInfo.filename);
|
|
69
78
|
}
|
|
70
79
|
else {
|
|
80
|
+
fileInfo['_ext'] = ext;
|
|
71
81
|
ctx.fields = fields;
|
|
72
82
|
ctx.files = [fileInfo];
|
|
73
83
|
return next();
|
|
@@ -93,9 +103,11 @@ let UploadMiddleware = class UploadMiddleware {
|
|
|
93
103
|
const requireId = `upload_${Date.now()}.${Math.random()}`;
|
|
94
104
|
const files = data.files;
|
|
95
105
|
const notCheckFile = files.find(fileInfo => {
|
|
96
|
-
|
|
106
|
+
const ext = this.checkExt(fileInfo.filename);
|
|
107
|
+
if (!ext) {
|
|
97
108
|
return fileInfo;
|
|
98
109
|
}
|
|
110
|
+
fileInfo['_ext'] = ext;
|
|
99
111
|
});
|
|
100
112
|
if (notCheckFile) {
|
|
101
113
|
throw new _1.MultipartInvalidFilenameError(notCheckFile.filename);
|
|
@@ -103,7 +115,7 @@ let UploadMiddleware = class UploadMiddleware {
|
|
|
103
115
|
ctx.files = await Promise.all(files.map(async (file, index) => {
|
|
104
116
|
const { data, filename } = file;
|
|
105
117
|
if (mode === 'file') {
|
|
106
|
-
const ext = (0, path_1.extname)(filename);
|
|
118
|
+
const ext = file['_ext'] || (0, path_1.extname)(filename);
|
|
107
119
|
const tmpFileName = (0, path_1.resolve)(tmpdir, `${requireId}.${index}${ext}`);
|
|
108
120
|
await writeFile(tmpFileName, data, 'binary');
|
|
109
121
|
file.data = tmpFileName;
|
|
@@ -156,12 +168,15 @@ let UploadMiddleware = class UploadMiddleware {
|
|
|
156
168
|
return false;
|
|
157
169
|
}
|
|
158
170
|
checkExt(filename) {
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
171
|
+
const lowerCaseFileNameList = filename.toLowerCase().split('.');
|
|
172
|
+
while (lowerCaseFileNameList.length) {
|
|
173
|
+
lowerCaseFileNameList.shift();
|
|
174
|
+
const curExt = `.${lowerCaseFileNameList.join('.')}`;
|
|
175
|
+
if (this.uploadWhiteListMap[curExt]) {
|
|
176
|
+
return curExt;
|
|
177
|
+
}
|
|
163
178
|
}
|
|
164
|
-
return
|
|
179
|
+
return false;
|
|
165
180
|
}
|
|
166
181
|
static getName() {
|
|
167
182
|
return 'upload';
|
package/dist/parse.js
CHANGED
|
@@ -74,10 +74,6 @@ const parseFromReadableStream = (readStream, boundary) => {
|
|
|
74
74
|
}
|
|
75
75
|
// 正在传输中的话
|
|
76
76
|
if (isTransformFileData) {
|
|
77
|
-
if (lastChunk.length) {
|
|
78
|
-
chunk = Buffer.concat([lastChunk, chunk]);
|
|
79
|
-
lastChunk = emptyBuf;
|
|
80
|
-
}
|
|
81
77
|
const newPreChunk = Buffer.concat([preChunk, chunk]);
|
|
82
78
|
const newBlockIndex = (0, exports.bufferIndexOf)(newPreChunk, bufferSeparator);
|
|
83
79
|
// 存在新的块则代表已经结束了
|
|
@@ -122,7 +118,7 @@ const parseFromReadableStream = (readStream, boundary) => {
|
|
|
122
118
|
resolve({ fileInfo, fields });
|
|
123
119
|
break;
|
|
124
120
|
}
|
|
125
|
-
callback(null,
|
|
121
|
+
callback(null, lastChunk);
|
|
126
122
|
},
|
|
127
123
|
});
|
|
128
124
|
readStream.pipe(fileInfo.data);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@midwayjs/upload",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.1",
|
|
4
4
|
"description": "Midway Component for upload",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "index.d.ts",
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"@midwayjs/serverless-app": "^3.6.0",
|
|
34
34
|
"@midwayjs/web": "^3.6.0"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "7aa8d1d712ff5ae7e3b27eb2e154d3f7ee40889a"
|
|
37
37
|
}
|