const server = http.createServer((req, res) => {
const multipart = req.pipe(new Multipart({ headers: req.headers }));
const zip = new Zip();
const FS_UPLOADS_DIR = '/var/www/uploads';
const S3_BUCKET = 'test-stream-multipart-upload';
const S3_UPLOADS_PATH = 'uploads';
const S3_TEMP_PATH = 'temp';
multipart.once('data', () => {
res.writeHead(200, { 'Content-Type': 'application/json' });
});
multipart.once('error', (err) => {
if (!res.headersSent) {
res.writeHead(400, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ error: err.message }));
}
});
multipart.pipe(new MultipartError()).pipe(zip);
multipart.pipe(new Pick('metadata')).pipe(zip);
multipart.pipe(new FileSize()).pipe(zip);
multipart.pipe(new FileHash({ encoding: 'bs58' })).pipe(zip);
multipart.pipe(new StorageTempLocal()).pipe(zip);
multipart.pipe(new StorageTempS3({ bucket: S3_BUCKET, path: S3_TEMP_PATH })).pipe(zip);
multipart.pipe(new Exiftool()).pipe(zip);
zip
.pipe(new Merge())
.pipe(new StorageLocal({ dir: FS_UPLOADS_DIR }))
.pipe(new StorageS3({ bucket: S3_BUCKET, path: S3_UPLOADS_PATH, saveMetadata: true }))
.pipe(new StringifyError())
.pipe(new JsonStream())
.pipe(res);
});