Мы используем IISNODE для размещения нашего приложения узла, написанного с использованием "hapi": "^ 16.5.2", маршрут вставлен ниже
{
method: 'POST',
path: '/xxxx/xxxx/xxxx/Upload/',
config: {
auth: { strategies: ['simple'] },
handler: uploadHandler.Upload,
plugins: {
'hapi-swagger': {
responses: fileHTTPStatus,
payloadType: 'form'
},
disinfect: {
disinfectQuery: false,
disinfectParams: false,
disinfectPayload: false
},
policies: ['MethodAudit']
},
tags: ['api'],
validate: {
payload: {
file: Joi.any().meta({ swaggerType: 'file' }).required().description('file')
}
},
payload: {
maxBytes: 209715200,
parse: true,
allow: 'multipart/form-data',
output: 'stream'
},
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with', 'accept', 'authorization', 'content-type', 'if-none-match', 'origin', 'Accept-language']
}
}
}
метод uploadHandler.Upload выглядит следующим образом:
function Upload (request, reply) {
if (request.payload) {
var data = request.payload;
if (data.file) {
var originalName = data.file.hapi.filename;
var path = rootDocPath + originalName; //rootDocPath is our common location
var file = fs.createWriteStream(path);
file.on('error', function (err) {
console.error(err)
});
data.file.pipe(file);
file.on('end', function() {
console.log('file ended');
});
file.on('finish', function() {
console.log('file finished');
});
data.file.on('end', function(err) {
console.log('data.file ended');
});
file.on('close', function(err) {
reply('Uploaded');
});
} else {
reply('no file')
}
} else {
reply('no payload')
}
}
Ответ, который мы получаем: Подробная ошибка IIS 8.5 - 500.1013 - Внутренняя ошибка сервера
- Во время отладки мы могли видеть, что ответ («Загружен») выполняется, но ответ никогда не принимается вызывающей стороной.
- Такое поведение проявляется только при использовании более крупных файлов (более 1,9
МБ), для небольших файлов работает 100%