محمد هاني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 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Nuhla Almasri نشر 20 مايو 2021 أرسل تقرير مشاركة نشر 20 مايو 2021 (معدل) على حسب علمي فانه يجب ان تقوم بإزالة data:image/jpeg;base64, من الصورة حتى يتم كتابتها بالشكل الصحيح و من هذه المعلومات يمكنك حفظ نوع الصورة و لكن باقي البيانات هي المعلومات المهمة لكتابة صورة على شكل ملف لذلك يمكنك ازالة هذه الباينات بالطريقة التالية وبعد ذلك يمكنك حفظها كما فعلت سابقا // هنا تقوم بلزالة هذه البانات من الصورة var base64Data = req.rawBody.replace(/^data:image\/png;base64,/, ""); تم التعديل في 20 مايو 2021 بواسطة Nuhla Almasri اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
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 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
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'); }); اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
محمد هاني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
على الرغم من عدم حدوث أي أخطاء أثناء العمليه فما الحل ؟
تم التعديل في بواسطة محمد هاني3رابط هذا التعليق
شارك على الشبكات الإجتماعية
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.