Czesć,
Robię dedykowany uploader dla jednej aplikacji. Korzystam z Node.js, express, i biblioteki Multer do uploadowania plików. Kod działa dla małych plików ale nie moge sobie poradzić z wysyłaniem plików większych np. 500 MB. Znalazłem już na forach sugestie czasu wydłużania połączenia ale to nie pomaga, wciąż mam błąd:
net::ERR_CONNECTION_RESET
plik serwera uploader.js
:
const express = require('express');
const multer = require('multer')
const fs = require('fs')
const app = express();
const bodyParser = require('body-parser')
const {
engine
} = require('express-handlebars')
const db = require('./db')
app.engine('handlebars', engine({
defaultLayout: 'main',
}))
app.set('view engine', 'handlebars')
app.use(express.static(__dirname + '/public'))
const jsonParser = bodyParser.json()
const storage = multer.diskStorage({
destination: function (req, file, cb) {
const id = req.body.order
const path = `D:/JS/test/${id}`
fs.mkdirSync(path, { recursive: true })
cb(null, path)
},
filename: function (req, file, cb) {
cb(null, file.originalname)
}
})
const upload = multer({
storage: storage,
limits: {
fileSize: 2 * 1024 * 1024 * 1024
}
})
app.post('/upload', jsonParser, upload.array('files'), function (req, res, next) {
req.socket.setTimeout(10 * 60 * 1000)
console.log(req.files)
console.log(req.body)
})
function startServer() {
const port = 3000;
server = app.listen(port, function () {
console.log('Node version:' + process.versions.node);
console.log('Express server listening on port %d in %s mode', port, app.settings.env);
});
server.on('connection', function(socket) {
// 10 minutes timeout
socket.setTimeout(10 * 60 * 1000);
});
const timeoutValue = 10*60*1000
server.headersTimeout = timeoutValue
}
startServer()
formularz html:
<form method="post" id="uploadFiles" enctype="multipart/form-data">
<input type="hidden" id="order" name="order" />
<input type="file" name="files" multiple="multiple" />
<input type="button" onclick="uplFiles()" value="Upload" />
</form>
<script type="application/javascript" src="http://127.0.0.1:3000/javascript/start.js"></script>
plik start.js
:
let fullId = document.querySelector("#order-id").attributes.value.nodeValue
document.getElementById("order").value = fullId
function uplFiles() {
fetch('/upload', {
method: 'POST',
body: formData
})
.then(res => res.json())
.then(object => {
console.log(object)
})
}
znalazłem taką funkcje która dodatkowa ma wydłużać czas oczekiwania na na response ale tez nie działa:
function uplFiles() {
const form = document.getElementById("uploadFiles");
const formData = new FormData(form);
function timeout(ms, promise) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
reject(new Error("timeout"))
}, ms)
promise.then(resolve, reject)
})
}
timeout(10 * 60 * 1000,
fetch('/upload', {
method: 'POST',
body: formData
})
.then(function (response) {
console.log(response)
// process response
})
.catch(function (error) {
console.log(error)
// might be a timeout error
})
)
}
Ma ktoś może pomysł jak sobie z tym poradzić? trafiłem na ścianę :(