إعادة تسمية الملفات التي تم تحميلها

لقد قمت مؤخرًا بتحميل ملفات PDF لعروض أكاديمية (إلى هذا الموضوع حول التنبؤ المناخي الموسمي، كما حدث).

إن اصطلاح تسمية الملفات الذي أستخدمه هو:

  • 0000-leadauthor-[etal-]title-title-title.pdf

حتى الآن، كل شيء على ما يرام. حتى اكتشفت أن لدي خطأ في اسم المؤلف الرئيسي. ولكن عندما أحاول تحميل الملف نفسه تحت اسم ملف مصحح، يلاحظ نظام Discourse أن الملف مطابق تمامًا في جوانب أخرى — أعتقد أن هناك عملية تجزئة (hashing) تحدث هنا — ويقوم بتقديم مرجع إلى الملف الأصلي بدلاً من ذلك، مع بقاء اسم الملف دون تغيير وما زال غير صحيح.

الحل البديل الذي اعتمدته هو تغيير الإعداد التالي إلى 1 (الافتراضي هو 48)، وإزالة جميع الإشارات في التنسيق، والانتظار حتى يتم حذف الملف الناتج:

  • Settings > Files > clean orphan uploads grace period hours

كما جربت تعيين هذا المعلمة المحددة إلى 0، لكن ذلك لم يبدو فعالاً. في هذه الحالة، قد يكون من الأفضل تعديل تلميح الأداة ليقرأ: “لتعطيل فترة السماح، اضبطها على 0”. أو بشكل مناسب بديل: “لتفعيل تأثير شبه فوري، اضبطها على 0”.

لا يمكنني معرفة مدى تكرار تشغيل هذا النوع من الصيانة، لكنني افترضت أنه يتم كل ساعة؟ ربما يتم يوميًا بدلاً من ذلك؟ سيكون من المفيد معرفة ذلك أيضًا.

شكرًا مسبقًا على أي مساعدة حول كيفية تسريع عملية إعادة تسمية هذه الملفات! لدي حل بديل، لكنه غير عملي وبطيء إلى حد ما.

كل ساعة…

بما أنني لستُ على دراية بـ Ruby، يبدو أن 0 تعني 1 أيضًا. ربما يجب أن تنص تلميح المعامل على: “يُفسَّر الرقم 0 على أنه 1.” أو ما شابه ذلك. خاصةً أن الصفر غالبًا ما يحمل المعنى الخاص “تعطيل” في ظروف أخرى. شكرًا لك @neounix.

أعتقد أن ما تريد فعله هو تحديث سجل الرفع من خلال وحدة تحكم Rails، إذا كنت تستضيفه بنفسك. أشك في وجود طريقة للقيام بذلك عبر واجهة برمجة التطبيقات، لكنني لم أفحص الأمر بعد.

نحن نعمل على استضافة ذاتية. لقد عُرض عليّ الوصول إلى حساب قشرة (shell)، لكنني لم أتابع ذلك. شكرًا على التلميح.

انتظر. لست متأكدًا تمامًا مما تحاول فعله. هل هو تغيير الاسم الذي يراه الأشخاص في المنشورات التي تم رفعها؟ إذا كان الأمر كذلك، فقد ترغب في القيام بشيء مثل:

rake posts:remap["old-name.pdf","newname.pdf"]

كما هو موضح في استبدال نص في جميع المنشورات. أعتقد أنه بالنسبة لأغراضك، لا يهم اسم الملف الأصلي في نموذج الرفع حقًا.

لكن يمكنك تغيير ذلك باستخدام:

u=Upload.find_by(original_filename: 'mypretty-w9.pdf')
u.original_filename='better-name.pdf'
u.save

لقد حاولت إعادة بناء منشور يحتوي على هذا الرفع ولم يحدث شيء.

تعديل:

def rename_upload(old_name, new_name)
  u=Upload.find_by(original_filename: old_name)
  u.original_filename=new_name
  u.save
end

إذا قمت بلصق ذلك، فيمكنك:

rename_upload('name.pdf','better-name.pdf')

سيفعل ذلك ما يلزم لتحميل الملفات بالاسم الأفضل.

في حياتي السابقة كأستاذ أكاديمي، كان لدي طريقتي المحددة في تسمية ملفات PDF الخاصة بي والتي كانت مختلفة عن أي شخص آخر؛ أنا متأكد تقريبًا أن لزوجتي طريقتها الخاصة. تخميني هو أن لن أحدًا أن يعجبهم أسماء ملفاتك حتى عندما تحصل عليها “بشكل صحيح”. :wink:

ليس ما كنت أحاول فعله. كانت سلسلة leadauthor جزءًا من اسم الملف. لا أكثر. لكن عندما قمت بتعديل اسم الملف (لأن فهمي لاصطلاحات تسمية العائلات لدى الأكاديميين الإسبان محدود للغاية) وحاولت رفع الملف المُعاد تسميته، لاحظ نظام discourse وجود ملف مطابق له في مظهره، فاستبدله بالملف المستهدف الأصلي واسمه. أعتقد أن هذا يمكن اعتباره ميزة؟ :roll_eyes: لم أستطع رفع الملف ذي الاسم المصحح إلا بعد حذف ذلك الملف من قاعدة بيانات الموقع. أقدر حقًا مساعدتك واهتمامك @pfaffman.

أين ترى “اسم الملف”؟ اسم الملف الفعلي في نظام الملفات هو سلسلة عشوائية.

بعد الاختبار في مثيلي، يمكنك تغيير اسم الملف في [filename.pdf|attachment](upload://filehash.pdf)، ورغم أن اسم الملف يظهر كـ filename.pdf في المنشور، إلا أنه يُحمّل باسم الملف الأصلي. أظن أن هذا هو ما يريده بالضبط: إعادة تسمية اسم الملف المستخدم عند التحميل.

ليس أمرًا حرجًا، لكنني أود أيضًا القدرة على إعادة تسمية الملفات المُحمَّلة.

أوه، حسنًا. إذن، سطور كود رايلز الثلاثة تفعل ما تريد. لا يغير هذا ما تراه في المنشورات، لكن إذا نقرت على الملف، سيتم حفظه باسم “better-name.pdf”.

إعجابَين (2)

شكرًا للجميع الذين ردوا.

إعجاب واحد (1)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.