Bonjour,
bonjour je tente sans succès d'uploader des fichiers assez gros (>5GB).
j'ai tenté plusieurs solutions glanées sur le net (multer, busboy, express-fileupload), mais rien n'y fait. J'ai le droit à un econnreset au bout d'un certain temps.
j'utilise postman pour tester mon API.
ci-dessous les 3 types de codes utilisés :
express-fileupload :
busboy :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 const express = require('express'); const fileUpload = require('express-fileupload'); const cors = require('cors'); const bodyParser = require('body-parser'); const morgan = require('morgan'); const _ = require('lodash'); const app = express(); // enable files upload app.use(fileUpload({ createParentPath: true, useTempFiles : true, tempFileDir : '/tmp/' })); //add other middleware app.use(cors()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); app.use(morgan('dev')); //start app const port = process.env.PORT || 3000; app.listen(port, () => console.log(`App is listening on port ${port}.`) ); app.post('/upload-avatar', async (req, res) => { try { if(!req.files) { res.send({ status: false, message: 'No file uploaded' }); } else { //Use the name of the input field (i.e. "avatar") to retrieve the uploaded file let avatar = req.files.avatar; //Use the mv() method to place the file in upload directory (i.e. "uploads") avatar.mv('./uploads/' + avatar.name); //send response res.send({ status: true, message: 'File is uploaded', data: { name: avatar.name, mimetype: avatar.mimetype, size: avatar.size } }); } } catch (err) { res.status(500).send(err); } }); app.post('/upload-photos', async (req, res) => { try { if(!req.files) { res.send({ status: false, message: 'No file uploaded' }); } else { let data = []; //loop all files _.forEach(_.keysIn(req.files.photos), (key) => { let photo = req.files.photos[key]; //move photo to uploads directory photo.mv('./uploads/' + photo.name); //push file details data.push({ name: photo.name, mimetype: photo.mimetype, size: photo.size }); }); //return response res.send({ status: true, message: 'Files are uploaded', data: data }); } } catch (err) { res.status(500).send(err); } });
multer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
48
49
50
51
52
53
54
55
56
57 const express = require('express'); // Express Web Server const busboy = require('connect-busboy'); // Middleware to handle the file upload https://github.com/mscdex/connect-busboy const path = require('path'); // Used for manipulation with path const fs = require('fs-extra'); // Classic fs const bodyParser = require('body-parser') const app = express(); // Initialize the express web server app.use(busboy({ highWaterMark: 2 * 1024 * 1024, // Set 2MiB buffer })); // Insert the busboy middle-ware const uploadPath = path.join(__dirname, 'fu/'); // Register the upload path fs.ensureDir(uploadPath); // Make sure that he upload path exits app.use(bodyParser.json({ limit: '50GB' })); /** * Create route /upload which handles the post request */ app.route('/upload-avatar').post((req, res, next) => { req.pipe(req.busboy); // Pipe it trough busboy req.busboy.on('file', (fieldname, file, filename) => { console.log(`Upload of '${filename}' started`); // Create a write stream of the new file const fstream = fs.createWriteStream(path.join(uploadPath, filename)); // Pipe it trough file.pipe(fstream); // On finish of the upload fstream.on('close', () => { console.log(`Upload of '${filename}' finished`); res.redirect('back'); }); }); }); /** * Serve the basic index.html with upload form */ app.route('/').get((req, res) => { res.writeHead(200, {'Content-Type': 'text/html'}); res.write('<form action="upload" method="post" enctype="multipart/form-data">'); res.write('<input type="file" name="fileToUpload"><br>'); res.write('<input type="submit">'); res.write('</form>'); return res.end(); }); const server = app.listen(3000, function () { console.log(`Listening on port ${server.address().port}`); });
merci pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126 const express = require('express'); const multer = require('multer'); const cors = require('cors'); const bodyParser = require('body-parser'); const morgan = require('morgan'); // create express app const app = express(); // upload file path const FILE_PATH = 'uploads'; // configure multer const upload = multer({ dest: `${FILE_PATH}/`, limits: { files: 5, // allow up to 5 files per request, fieldSize: 10 * 1024 * 1024 * 1024 // 2 MB (max file size) }, fileFilter: (req, file, cb) => { // allow images only if (!file.originalname.match(/\.(jpg|jpeg|png|gif|avi|mkv)$/)) { return cb(new Error('Only image are allowed.'), false); } cb(null, true); } }); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '/uploads') }, filename: function (req, file, cb) { // const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9) // cb(null, file.fieldname + '-' + uniqueSuffix) cb(null , file.originalname); } }) // enable CORS app.use(cors()); // add other middleware app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.use(morgan('dev')); app.use(function(req, res, next){ res.setTimeout(960000, function(){ // 8 minute timeout adjust for larger uploads console.log('Request has timed out.'); res.send(408); }); next(); }); // upload single file app.post('/upload-avatar', upload.single('avatar'), async (req, res) => { try { const avatar = req.file; // make sure file is available if (!avatar) { res.status(400).send({ status: false, data: 'No file is selected.' }); } else { //send response res.send({ status: true, message: 'File is uploaded.', data: { name: avatar.originalname, mimetype: avatar.mimetype, size: avatar.size } }); } } catch (err) { res.status(500).send(err); } }); // upload multiple files app.post('/upload-photos', upload.array('photos', 8), async (req, res) => { try { const photos = req.files; // check if photos are available if (!photos) { res.status(400).send({ status: false, data: 'No photo is selected.' }); } else { let data = []; // iterate over all photos photos.map(p => data.push({ name: p.originalname, mimetype: p.mimetype, size: p.size })); // send response res.send({ status: true, message: 'Photos are uploaded.', data: data }); } } catch (err) { res.status(500).send(err); } }); // start the app const port = process.env.PORT || 3000; app.listen(port, () => console.log(`App is listening on port ${port}.`) );
Partager