-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathvalidation.ts
More file actions
47 lines (40 loc) · 1.19 KB
/
validation.ts
File metadata and controls
47 lines (40 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import express from 'express';
import { DiskFile, DiskStorage, OnComplete, uploadx, UploadxResponse } from 'node-uploadx';
const PORT = process.env.PORT || 3002;
const app = express();
type OnCompleteBody = {
message: string;
id: string;
};
const onComplete: OnComplete<DiskFile, UploadxResponse<OnCompleteBody>> = file => {
const message = `File upload is finished, path: ${file.name}`;
console.log(message);
return {
statusCode: 200,
message,
id: file.id,
headers: { ETag: file.id }
};
};
const storage = new DiskStorage({
directory: process.env.UPLOAD_DIR || 'upload',
onComplete,
expiration: { maxAge: '1h', purgeInterval: '10min' },
validation: {
mime: { value: ['video/*'], response: [415, { message: 'video only' }] },
size: {
isValid(file) {
this.response = [412, { message: `The file size(${file.size}) is larger than 5GiB` }];
return file.size <= 5368709120;
}
},
mtime: {
isValid: file => !!file.metadata.lastModified,
response: [403, { message: 'Missing `lastModified` property' }]
}
}
});
app.use('/files', uploadx({ storage }));
app.listen(PORT, () => {
console.log('listening on port:', PORT);
});