جافا سكريبت - كيف يمكن استخراج/تحليل المحتوى الثنائي من استجابة متعدد الأجزاء في NodeJS؟
أريد استخراج المحتوى الثنائي من استجابة متعددة الأجزاء التي لدي كما يلي -
ليس لدي وصول إلى أي كائن طلب (Express/NodeJS). لدي فقط كائن الاستجابة هذا الذي أريد تحليله واستخراج الجزء الثنائي منه.
تعديل -
لتوضيح الأمور أكثر -
لدي نقطة نهاية (ليست تطبيق Express تقليدي لكنها FaaS) - تسمى "/fileUpload"
تقبل هذه النقطة النهائية جميع أنواع الطلبات - GET، POST، PUT (FaaS).
عندما أقوم بعمل طلب POST/PUT مع ملف -
testImage.PNGفي بيانات النموذج، أتلقى المحتوى في كائن الطلب. يوفر بيئة تشغيل FaaS كائن req كمعامل لدالة المعالج.الآن، عندما أطبع - request.body للطلب POST الوارد، أحصل على المحتوى كما هو موضح في الصورة أعلاه.
إذا حاولت رفع هذا المحتوى الثنائي مباشرةً إلى S3، فإنه يؤدي إلى تلف الصورة، وأعتقد أن السبب هو وجود محتوى إضافي في الاستجابة متعددة الأجزاء مثل -
Content-Disposition...
ما أود فعله هو تحليل المحتوى المتعدد الإضافي مثل ترويسة نوع المحتوى وحدود الجزء المتعدد وما إلى ذلك، بحيث أحصل فقط على البينات الخاصة بالصورة.
الإجابة رقم 1
لاستخراج المحتوى الثنائي، نحتاج إلى إزالة/تحليل أقسام الرأس والحدود فيه. هناك مكتبة - parse-multipart تسهّل القيام بذلك.
مثال -
افتراض أن رأس الطلب يحتوي على رأس content-type.
var multipart = require('parse-multipart');
// The following section is the express endpoint/ FaaS handler
{
let header = req.headers["content-type"]
let boundary = header.split(" ")[1]
boundary = header.split("=")[1]
let body = event.data;
//console.log("Boundary - "+ boundary)
let parts = multipart.Parse(body, boundary);
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
console.log(part)
var params = {
Bucket: s3bucket,
Key: part.file,
Body: part.data,
ACL: 'public-read',
Metadata: {
'Content-Type': part.type
}
};
//Upload the data to aws
const data = await s3.putObject(params).promise()
}
return parts
}
الإجابة رقم 2
لقد عانيت لعدة أيام مع هذه المشكلة. كان الحل في بوابة API > الإعدادات > أنواع البيانات الثنائية إضافة multipart/form-data.

