У меня есть API GETendpoint, который загружает файл 1 ГБ (точно 1080000108B) в мое ведро s3, это код:
var express = require('express'),
HttpStatus = require('http-status-codes'),
morgan = require('morgan'),
packageConfig = require('./package.json'),
fs = require('fs'),
AWS = require('aws-sdk')
//zlib = require('zlib')
express()
.use(morgan('combined'))
.get('/api/v1', function (req, res) {
var s3 = new AWS.S3({
accessKeyId:'my access key id',
secretAccessKey:'my secret key access'
});
var rs = fs.createReadStream('./big.file')//.pipe(zlib.createGzip());
s3.upload({
Body:rs,
Key:Date.now().toString(),
Bucket:'my bucket'
},function(err,data){
console.log(err,data)
res.status(HttpStatus.OK).send(err + data)
}).on('httpUploadProgress', function(evt) {
console.log('Progress:', evt.loaded, '/', evt.total);
})
}).listen(process.env.PORT || 5000, function () {
var address = this.address();
var service = packageConfig.name + ' version: ' + packageConfig.version + ' ';
console.log('%s Listening on %d', service, address.port);
});
Я открываю первый терминал A и запускаю этот сервер
node myserver.js
Затем я открываю второй терминал B и вызываю конечную точку с помощью следующей команды:
curl localhost:5000/api/v1
Сразу же, начало процесса загрузки отображается в терминале A:
Progress: 5242880 / 1080000108
Progress: 10485760 / 1080000108
Progress: 15728640 / 1080000108
...
...
Progress 513802240 / 1080000108
Но когда достигнут прогресс 513802240/1080000108 , мой терминал B (где был сделан запрос скручивания) отображает следующее сообщение:
curl: (52) Empty reply from server
При этом момент, я не нашел ничего «странного» (я представлял себе ошибку тайм-аута), но что меня заинтриговало, так это то, что мой терминал A (сервер) снова получил тот же запрос и продолжил процесс загрузки с того места, где он был оставлен, и что, пока загрузка не завершится:
Progress: 513802240 / 1080000108
::ffff:127.0.0.1 - - [12/Apr/2020:08:50:26 +0000] "GET /api/v1 HTTP/1.1" - - "-" "curl/7.58.0"
Progress: 519045120 / 1080000108
Progress: 524288000 / 1080000108
...
Progress: 1074790400 / 1080000108
Progress: 1080000108 / 1080000108
null { Location:
'https://my bucket name.s3.eu-west-3.amazonaws.com/1586681306481',
Bucket: 'my bucket name',
Key: '1586681306481',
ETag: '"218ad7075293afb6d725aa60ddcb0142-206"' }
Итак, вот мои следующие вопросы:
, которые отправляют тот же запрос на мой сервер, так как мой терминал curl закрыт и получили ответ:
curl: (52) Пустой ответ от сервера
, даже если я понимаю первый пункт, как сервер знает, что он должен перезапустить (если это действительно запускается?) из предыдущего неудачного хода, почему он не перезапускается с начала, так как это может быть еще один запрос от другого пользователя, приходящий
дополнительный пункт: я знаю, что могу ускорить загрузку с сжатый gzip файл, но я сначала хотел протестировать без какой-либо оптимизации, а затем мне показалось, что перед тем, как применить gzip-оптимизацию, я сначала понял это странное поведение
Заранее спасибо