في عالم تطوير الويب المعقد، تواجه الكثير من المطورين تحديات رفع الصور عبر النطاقات المختلفة باستخدام Angular وLaravel. يبدو أنك تستخدم مكتبة ngFileUpload
في الجهة الأمامية وتواجه مشكلة مع رفع الصور بسبب رسالة الخطأ “Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource”.
لفهم السياق بشكل أفضل، يعتمد هذا الخطأ على سياسات الأمان المتصفح ويشير إلى أن الطلب المُرسَل من موقع ليس مصرّحًا له بالوصول إلى المصدر المستهدف بسبب عدم وجود رأس ‘Access-Control-Allow-Origin’.
تأكد أولاً من أن تكون إعدادات CORS في Laravel صحيحة، ويبدو أن لديك التكوين الصحيح بالفعل في middleware. لكن يُفضل استخدام ميثود header
المتاحة في Laravel بشكل أكثر دقة. يمكنك تجربة التالي:
phppublic function handle($request, Closure $next)
{
return $next($request)
->header('Access-Control-Allow-Origin', 'http://localhost:8001')
->header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE')
->header('Access-Control-Allow-Headers', 'Content-Type, X-Auth-Token, Origin');
}
الآن، بخصوص Angular، يُفضل تضمين رأس ‘Content-Type’ في طلب الـ OPTIONS، وهو الأمر الذي قد يحل المشكلة. يمكنك تحديث كود Angular كما يلي:
javascriptvar uploadFile = function (file) {
if (file) {
if (!file.$error) {
Upload.upload({
url: baseUrl + 'upload',
file: file,
method: 'POST',
headers: {
'Content-Type': file.type // تضمين Content-Type في رأس الطلب
}
}).progress(function (evt) {
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
//console.log(evt.total);
}).success(function (data, status, headers, config) {
$timeout(function () {
console.log(data);
console.log(status);
if (status == 200) {
logo_path = data.logo_path;
}
});
});
}
}
};
جرب هذه الخطوات وراجع إعدادات الأمان في Laravel وAngular للتأكد من أنها تتناسب مع بعضها البعض. بالإضافة إلى ذلك، يُفضل استخدام أدوات تصحيح المتصفح والتحقق من الشبكة للتحقق من الطلبات والردود وتحديد مكان الخلل بدقة أكبر.
المزيد من المعلومات
لفهم المزيد حول مشكلتك في رفع الصور عبر Angular وLaravel، يمكننا التفحص بعمق بعض الجوانب الأخرى التي قد تساهم في هذه المشكلة.
-
راجع إعدادات نوع المحتوى (Content-Type):
تأكد من أن نوع المحتوى الذي يتم إرساله في طلب الرفع يتناسب مع ما يتوقعه الخادم. في الكود الحالي، تم تضمين نوع الملفfile.type
في رأس الطلب، ولكن يمكنك أيضًا استخدام نوع محتوى ثابت مثل'image/jpeg'
للتحقق من عدم وجود تعارض في هذا الجانب. -
التحقق من تكوين الخادم Laravel:
تأكد من أن تكوين CORS في Laravel يتماشى تمامًا مع متطلباتك. قد تحتاج أيضًا إلى التحقق من أن Laravel يفهم الطلبات من النطاق الذي يأتي منه Angular. -
تحقق من ردود الـ OPTIONS:
تأكد من أن الطلب OPTIONS يحصل على رد ناجح من الخادم. يمكنك استخدام أدوات متصحح الأخطاء في المتصفح لرؤية كيفية تفاعل Angular مع طلب OPTIONS وما إذا كانت هناك مشكلة في هذه المرحلة. -
تحليل سجلات الخادم Laravel:
راقب سجلات الخادم Laravel لرؤية ما إذا كان هناك أي رسائل خطأ أو تحذيرات تشير إلى مشكلة محتملة مع طلبات الرفع. -
استخدام أدوات تحليل الشبكة:
يمكنك استخدام أدوات مثل محلل الشبكة في متصفحك لتحليل الطلبات والردود. يتيح لك ذلك رصد كل التفاعلات بين Angular والخادم والتحقق من صحة رؤوس الطلب والرد. -
التحقق من إصدارات ngFileUpload:
تأكد من أن الإصدار المستخدم من ngFileUpload يتوافق مع إصدارات Angular الخاصة بك وأنه لا يوجد به مشاكل معروفة تؤثر على طلبات CORS. -
التحقق من تكوين الخادم للطلبات الكبيرة:
قد تواجه مشكلة إذا كانت الصور كبيرة الحجم. تأكد من أن الخادم مكون للتعامل مع رفع الصور الكبيرة ولا يوجد قيود تحجب الطلبات الكبيرة.
باتخاذ هذه الخطوات وفحص المزيد من التفاصيل، يمكنك أن تحسن فرص حل مشكلة رفع الصور الخاصة بك.