Я пытаюсь написать службу загрузки файлов, используя бессерверную структуру, которая может принимать двоичный ввод и сохранять данные в S3.
Проблема в том, что файлы оказываются поврежденными в корзине S3. Текстовые файлы проходят, но мое тестовое изображение - нет.
Это мой код:
const serverless = require('serverless-http');
const express = require('express');
const crypto = require("crypto")
const AWS = require('aws-sdk');
const app = express();
const s3 = new AWS.S3();
app.use(function(req, res, next) {
var chunks = [];
req.on('data', function(chunk) { chunks.push(chunk); });
req.on('end', function() {
req.rawBody = Buffer.concat(chunks);
next();
});
});
app.put('/v1/upload', async (req, res, cb) => {
let hash = crypto.createHash("sha256").update(req.rawBody).digest("hex");
console.log(req.rawBody.length);
... s3 stuff here
Я вижу в консоли, что размер файла неверный; 2540872. Реальный размер - 1395559. Я использую curl для проверки загрузки
curl -v -X PUT -H "Content-Type: application/octet-stream" --data-binary @test/image.png http://localhost:3000/prod/v1/upload