محمد هاني3 نشر 20 مايو 2021 أرسل تقرير نشر 20 مايو 2021 (معدل) السيرفر الخاص بي يعمل على Node.js ويتم إستقبال صوره بتشفير base64 data:image/jpeg;base64,/9j/4QCcRXhpZgAASUkqAAgAAAA ... CiiigD//Z هذه البيانات التي يتم إستقبالها من المفترض أن يتم حفظها على شكل صورة بصيغة jpg وبالتالي أستخدم Buffer و FileSystemWriter لتحقيق ذلك var imageBuffer = new Buffer(data, 'base64'); fs.writeFile("test.jpg", imageBuffer, function(err) {}); ولكن عند فتح ملف الصورة الناتجة بأي برنامج يظهر خطأ File is damaged or too big على الرغم من عدم حدوث أي أخطاء أثناء العمليه فما الحل ؟ تم التعديل في 20 مايو 2021 بواسطة محمد هاني3 1 اقتباس
0 Nuhla Almasri نشر 20 مايو 2021 أرسل تقرير نشر 20 مايو 2021 (معدل) على حسب علمي فانه يجب ان تقوم بإزالة data:image/jpeg;base64, من الصورة حتى يتم كتابتها بالشكل الصحيح و من هذه المعلومات يمكنك حفظ نوع الصورة و لكن باقي البيانات هي المعلومات المهمة لكتابة صورة على شكل ملف لذلك يمكنك ازالة هذه الباينات بالطريقة التالية وبعد ذلك يمكنك حفظها كما فعلت سابقا // هنا تقوم بلزالة هذه البانات من الصورة var base64Data = req.rawBody.replace(/^data:image\/png;base64,/, ""); تم التعديل في 20 مايو 2021 بواسطة Nuhla Almasri اقتباس
0 Wael Aljamal نشر 20 مايو 2021 أرسل تقرير نشر 20 مايو 2021 قبل استخدام data نحتاج لاقتطاع الجزء الأول منها لأنه يمثل تريمز البيانات وليس جزءاً من البيانات فعليا. يمكنك استخدام الشيفرة التالية: let data = 'data:image/jpeg;base64,ABCDEEgoAAAANSUhEUgAAA..kJggg=='; // شيفرة لاستقبال سلسلة البيانات و فصل البيانات من نمطها function decodeBase64Image(dataString) { var matches = dataString.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/), response = {}; if (matches.length !== 3) { return new Error('بيانات غير صالحة'); } response.type = matches[1]; // type هنا نمط البيانات response.data = new Buffer(matches[2], 'base64'); // هنا البياناتا لفعلية return response; } var imageBuffer = decodeBase64Image(data); console.log(imageBuffer); أضف الشيفرة السابقة لتعديل قيمة سلسلة البيانات قبل تمريرها ل writeFile. كما أن الاستدعاء سيصبح كالتالي: fs.writeFile('test.jpg', imageBuffer.data, function(err) { ... }); ^^^^^^^^^^^^^^^^^^ لاحظ: imageBuffer.data اقتباس
0 عبدالله عبدالرحمن11 نشر 21 مايو 2021 أرسل تقرير نشر 21 مايو 2021 ببساطة يكون في بداية تشفير base64 للصورة مثل الآتي data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA... ويمكنك أن تقوم بإستخدام كود بسيط لإزالة الكود الذي لا ينتمي للصورة كالآتي let base64String = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA'; // ليست صورة حقيقية // حذف الرأس الذي لا يتنمي للصورة let base64Image = base64String.split(';base64,').pop(); والآن يمكن حفظ الصورة في ملف بكل سهولة import fs from 'fs'; fs.writeFile('image.png', base64Image, {encoding: 'base64'}, function(err) { console.log('Image created'); }); اقتباس
السؤال
محمد هاني3
السيرفر الخاص بي يعمل على Node.js ويتم إستقبال صوره بتشفير base64
data:image/jpeg;base64,/9j/4QCcRXhpZgAASUkqAAgAAAA ... CiiigD//Z
هذه البيانات التي يتم إستقبالها من المفترض أن يتم حفظها على شكل صورة بصيغة jpg وبالتالي أستخدم Buffer و FileSystemWriter لتحقيق ذلك
var imageBuffer = new Buffer(data, 'base64'); fs.writeFile("test.jpg", imageBuffer, function(err) {});
ولكن عند فتح ملف الصورة الناتجة بأي برنامج يظهر خطأ File is damaged or too big
على الرغم من عدم حدوث أي أخطاء أثناء العمليه فما الحل ؟
تم التعديل في بواسطة محمد هاني33 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.